2010-12-02 38 views
0

J'ai deux points, a et b. J'ai besoin de calculer l'angle entre eux, donc je les traite comme des vecteurs. Cependant, le vecteur a sera toujours défini comme [0 0 0]. La lecture sur l'Matlab Newsreader, « Angle between two vectors », trois solutions sont proposées:Angle entre deux vecteurs dans Matlab

x1 = 0; 
y1 = 0; 
z1 = 0; 
x2 = 0; 
y2 = 1; 
z2 = 0; 
a = [x1,y1,z1]; b= [x2,y2,z2]; 

theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b))) 
theta = rad2deg(acos(dot(a,b))) 
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2)) 

Cependant, comme acos a des problèmes de précision que thêta se rapproche de zéro, mais des trois équations, ne acos fournit la bonne solution.

Dois-je continuer à utiliser acos ou est-il une meilleure solution?

+1

Quel est l'angle entre deux points? Et quel est l'angle entre deux vecteurs, quand l'un d'entre eux est [0 0 0]? – Henrik

+1

Que signifie même de trouver l'angle entre deux vecteurs où l'on est 0? Etes-vous sûr que ne devrait pas être [1 1 1]? De plus, la formule avec acos n'est valable que lorsque les vecteurs ont une longueur unitaire, ce qui n'est pas vrai pour au moins. – Xodarap

Répondre

-1

L'erreur est mise a = [0 0 0]. Le point d'intérêt est centré à l'origine, et pour calculer l'angle par rapport au vecteur b, vous devez spécifier la direction dans laquelle le point se déplace. Cela peut être fait en définissant a comme vecteur unitaire.

Si le point se déplace dans le "x" direction, puis x1=1

x1 = 1; 
y1 = 0; 
z1 = 0; 
x2 = 0; 
y2 = 1; 
z2 = 0; 
a = [x1,y1,z1]; b= [x2,y2,z2]; 

theta = rad2deg(atan2(norm(cross(a,b)),dot(a,b))) 
theta = rad2deg(acos(dot(a,b))) 
theta = rad2deg(atan2(x1*y2-x2*y1,x1*x2+y1*y2)) 

theta = 
    90 
theta = 
    90 
theta = 
    90 

Problème résolu, oubliez pas d'utiliser le vecteur unitaire: P

4

Un vector a une amplitude et une direction, alors que a et b ne sont que des points de coordonnées dans l'espace. Lorsque vous traitez a et b comme vecteurs, vous définissez implicitement [0 0 0] comme point d'origine pour les deux vecteurs. Cependant, puisque le point a est à [0 0 0], alors ce sera un vecteur avec une longueur nulle.

Si un vecteur a une longueur nulle, dans quelle direction faut-il point dans? La réponse est nulle part. Il ne pointe dans aucune direction et vous ne pouvez donc pas trouver l'angle entre celui-ci et un autre vecteur.

Je pense que peut-être vous avez défini votre problème mal. Votre système de coordonnées a-t-il une origine autre que [0 0 0]? Essayez-vous réellement de trouver l'angle entre la ligne formée par a et b et le plan x-y?

Questions connexes