2014-09-24 15 views
5

Sto lavorando su un'applicazione per le ultime settimane che coinvolge alcuni trigonometria e sono attualmente bloccato. Come mostrato nello schema seguente, ho un oggetto circolare (cerchio verde nella posizione n. 1) che conosco come punto centrale (chiamiamolo X1, Y1). Il cerchio ha un altro punto (cerchio arancione) che è un po 'decentrato, a metà strada tra due altri segni (cerchi blu). Questi marchi possono muoversi. Le coordinate del punto arancione vengono calcolate (chiamiamolo X2, Y2) e l'angolo della linea blu viene calcolato (chiamalo Angolo) in relazione all'orizzontale del cerchio.Calcola il nuovo offset del punto in base all'angolo di rotazione?

Diagram

posso calcolare la differenza tra il centro del cerchio e il punto da:

deltaX = X2-X1

DeltaY = Y2-Y1

ho bisogno di sposta e ruota il cerchio verde (CW o CCW, a seconda di quale è più corto) dalla posizione iniziale (posizione 1) alla posizione 2. Ciò significa che l'angolo potrebbe essere negativo o positivo. La linea blu deve finire verticale e il punto arancione al centro della posizione 2 (quadrato rosso). Conosco le coordinate per il centro della posizione 2 (chiamiamo questo punto X3, Y3). La posizione n. 1 e la posizione n. 2 sono esattamente a 90 gradi l'una dall'altra.

ho pensato che avrei potuto utilizzare alcune formule di trigonometria identità che calcolano la rotazione di un punto, in quanto tale:

offsetX = deltaX * cos (90-Angle) - DeltaY * sin (90-Angle)

offsetY = deltaX * sin (angolo 90) + deltaY * cos (angolo 90)

Speravo che questi offset fossero ciò di cui ho bisogno per regolare il cerchio sul suo nuovo centro quando si sposta/ruota verso la posizione 2.

X3 = X3 + offsetX

Y3 = Y3 + offsetY

Tuttavia, quando provo utilizzare questa matematica, non è mettendo il contrassegno arancione del cerchio al centro della piazza. Non sono sicuro che le mie equazioni e i miei calcoli siano corretti in base all'angolo di rotazione (positivo o negativo, CW o CCW) o se sto usando l'angolo correttamente (dove sottraggo l'angolo noto da 90 gradi). Come faccio a calcolare correttamente il punto/posizione finale? Qualsiasi aiuto ed esempi sarebbe molto apprezzato!

Grazie mille per il vostro tempo!

risposta

0

Quindi è necessario ruotare il cerchio per 90 - Angle e quindi spostare il punto arancione su (X3, Y3)?
In primo luogo è necessario trovare coordinata del punto arancione dopo la rotazione:

newX = X2 * cos(90 - Angle) - Y2 * sin(90 - Angle); 
newY = X2 * sin(90 - Angle) + Y2 * cos(90 - Angle); 

newX e newY sono di colore arancione coordinate punto dopo la rotazione. Per trovare mossa trasformazione semplicemente sottrarre:

moveX = X3 - newX; 
moveY = Y3 - newY; 

Ora, se si ruota cerchio 90 - Angle e spostate da (Movex, moveY) punto arancio si sposterà (X3, Y3). Cioè se si ruota il cerchio attorno al punto (0, 0). Se ruotate attorno a un punto (X, Y), dovete prima sottrarre X da X2, Y da Y2 e quindi aggiungere X a newX, Y a newY.La sottrazione "sposta" il punto base della rotazione su (0, 0), quindi dopo la rotazione è necessario spostarlo indietro:

newX = (X2 - X) * cos(90 - Angle) - (Y2 - Y) * sin(90 - Angle) + X; 
newY = (X2 - X) * sin(90 - Angle) + (Y2 - Y) * cos(90 - Angle) + Y; 
+0

Grazie. Darò una prova. Suppongo che dovrei chiarire che sto spostando il cerchio dalla posizione 1 alla posizione 2 e quindi eseguendo la rotazione lì. Quindi, ho bisogno di centrare quel punto arancione (X2, Y2) al centro del quadrato rosso (noto punto X3, Y3). L'angolo è calcolato in base ai cerchi blu e talvolta potrebbe essere negativo (tra -1 e -180). Non sei sicuro che questo influenzi le formule? – DataCrypt

+0

@DataCrypt Se il punto base di rotazione si sposta con il punto arancione, a scopo di calcolo non importa quale sarà il primo: in movimento o in rotazione. Se spostate il punto arancione su (X3, Y3), tuttavia, la risposta sarà errata poiché probabilmente ruotate il cerchio attorno al centro, non attorno al punto arancione (punto, attorno al quale ruotate, non cambia la coordinata dopo la rotazione). Ovviamente è solo se (X3, Y3) non ruota con il cerchio. – Atomosk

+0

@DataCrypt Qualsiasi valore va bene per 'sin' e' cos' e quelle formule anche -9000. L'unica cosa che mi confonde è '90 - Angle', dal momento che tutte le implementazioni sin e cos che ho visto prendono il valore radiante dell'angolo, non il grado. Ma sono abbastanza sicuro che tu lo sappia. – Atomosk

Problemi correlati