2016-11-24 1 views
0

Ok, also ich mache dieses lustige kleine Spiel in C++, leider stecken Ich bin ein „Radar“ auf zu machen, ich bin fest auf diesem TeilC++ Berechnung 2 Punkten basierend off 2 weitere Punkte

Example

(EDIT, ich habe bereits A & B, das einzige, was ich nicht haben, ist C & D)

Also, was ich tun müssen, ist, die zwei Punkte zu berechnen (2d vector) von C & , müssen sie in der Platzierung wie in der Lil-Bild, das ich oben gezeigt (ich entschuldige, ich weiß, es ist schlecht) sein.

B dreht sich um A so muss ich die Position von C & D berechnen auf dem, wie viel B um A gedreht hat. Ich werde ein Dreieck erstellen (zB eine Linie C-D ziehen, D-B & B zu A)

A gedacht als die Mitte der unteren Linie des Dreiecks werden könnte, das ist wie die Basis von allem dreht sich alles um A, und die Position C & muss entsprechend berechnet werden, wie viel B hat sich um A gedreht.

Was wäre der beste Weg, um eine kleine Funktion für diese Berechnung zu machen? z.B.

inline float returnDPoint(float A, float B) 
{ 
    float dPoint; 
    //calculate point of D based off A & B 
    return dPoint; 
} 


inline float returnCPoint(float A, float B) 
{ 
    float cPoint; 
    //calculate point of C based off A & B 
    return cPoint; 
} 

Hoffentlich habe ich meine Frage gut genug formuliert, danke fürs Lesen!

+1

Sie müssen den Winkel kennen, um die Position von 'A' zu berechnen. Fügen Sie * pi/2 * zum Winkel hinzu, um die Position des Zeigers um ein Viertel des vorausgehenden Kreises zu berechnen, und * 3pi/4 * für den anderen Punkt. Trigonometrie. –

+0

Ich habe bereits den Winkel von A berechnet. Und danke für den Kommentar, ich werde es ausprobieren :) – coddding

Antwort

1

Hier ist eine Berechnung C zu erhalten: von 90

auto angle = atan2(b.y-a.y,b.x-a.x) + pi/2.0; 
auto radius = sqrt((b.y-a.y)*(b.y-a.y)+(b.x-a.x)*(b.x-a.x)); 
Point C {a.x + radius * cos(angle), a.y +radius * sin(angle)}; 
+0

so D zu berechnen alles was ich tun würde ist Pi/4.0? – coddding

+1

pi/2.0 subtrahieren, anstatt hinzuzufügen. – gbehar

1

Da Sie suchen Drehungen °, Sie müssen nicht teuer Funktionen wie atan2, sqrt usw. Eine einfache Alternative wäre verwenden :

diffx = bx - ax; 
diffy = by - ay; 

cx = ax - diffy = ax - by + ay; 
cy = ay + diffx = ay + bx - ax; 

dx = ax + diffy = ax + by - ay; 
dy = ay - diffx = ay - bx + ax; 
+1

Es wird wahrscheinlich sein. Es ist jedoch in einem sehr niedrigen Maßstab. Wenn Sie es also nur einmal pro Frame aufrufen, macht das keinen Unterschied. –

Verwandte Themen