2010-11-03 5 views
0

J'ai deux points dans l'espace 2D, centré sur l'origine (0,0). Le premier point représente l'emplacement de départ et le second représente l'emplacement final. J'ai besoin de calculer l'angle de rotation entre les deux points, mon problème étant que l'hypoténuse de chaque point à (0,0) n'est pas égale.Calculer la rotation effectuée autour d'un point

Quelqu'un pourrait me dire comment calculer l'angle entre les deux points, en gardant à l'esprit qu'ils pourraient être n'importe où par rapport à (0,0).

Merci beaucoup,

Matt.

Répondre

1

Supposons que le point 1 est (x1, y1) et le point 2 est (x2, y2)

La tangente de l'angle de l'axe X au point 1, par rapport à (0,0) est y1/x1

la tangente de l'angle de l'axe X au point 2, par rapport à (0,0) est y2/x2

Prendre la tangente à l'arc (est-ce le bon terme? Tan-1 sur une calculatrice) à obtenir l'angle réel pour chacun, puis soustraire pour obtenir la réponse que vous cherchez

+0

@Matt W: Ne pas oublier les quadrants où sont les points, et environ "x = 0" cas. –

+0

Bons points. L'arc tangent est-il le bon terme, le savez-vous? Cela fait plus de 20 ans que j'ai eu un cours de maths formel, et ma mémoire est un peu rouillée. –

+0

@Lavir, dites-vous que la réponse fournie par Kevin O 'serait différente si les points sont, disons, (10,10) et (-12, -43)? –

1

Ceci est facilement accompli en prenant la arccosine du normalisé inner product des deux vecteurs. Autrement dit, étant donné u = (u x, u y) et v = (v x, v y), l'angle entre les deux est donnée par θ = acos (u · v/| u ||v |), où u · v = u x v x + u y v y est le produit scalaire des deux et le | | opérateur est le l normal donné par | u | = sqrt (u x + u y). Cela se traduira par la plus petite rotation qui peut être appliquée à l'un des vecteurs qui feront d'eux des multiples linéaires les uns des autres. Par conséquent, vous devrez peut-être jouer avec le signe θ pour vous assurer que vous allez dans la bonne direction si vous en avez un que vous voulez commencer.

+0

@ Fellows décernés: Merci. Je cherchais un moyen de mettre un point là-dedans, mais ça n'arrêtait pas d'insérer un gros carré. – andand

+0

Désolé, mais je ne sais pas quoi || signifie en mathématiques. Je soupçonne que ce problème de géométrie ne serait pas un problème si je le faisais. Pour cette raison, je ne sais pas non plus comment le convertir en code (je travaille en lua et en C#). –

+0

@Matt W: | u | signifie la longueur de u en utilisant la longueur cartésienne normale. C'est c'est le sqrt (u_x^2 + u_y^2). | u || v | signifie le produit de la longueur du vecteur u et la longueur du vecteur v. – andand

Questions connexes