2010-12-02 884 views
0

我有两点,分别是ab。我需要计算它们之间的角度,所以我把它们当作矢量来对待。但矢量a将始终定义为[0 0 0]。阅读在MATLAB新闻阅读器,“Angle between two vectors”,提供了三种解决方案: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)) 

然而,随着acos具有测量精度问题THETA接近零,但出了三个方程中,只有acos提供正确的解决方案。

我应该继续使用acos还是有更好的解决方案?

+1

什么是两点之间的角度?当两个矢量之一是[0 0 0]时,两个矢量之间的角度是多少? – Henrik 2010-12-02 15:51:32

回答

-1

错误在于设置a = [0 0 0]。兴趣点以原点为中心,并计算相对于矢量b的角度,您需要指定点在行进的方向。这可以通过设置a来完成,是一个单位向量。

如果点在“x”方向行驶,然后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 

问题解决了,忘记使用单位向量:P

4

A vector有幅度和方向,而ab只是空间坐标点。当您将ab作为向量对待时,您隐式将[0 0 0]定义为两个向量的原点。然而,由于点a[0 0 0],那么它将是一个零长度的向量。

如果矢量长度为零,它指向哪个方向?答案是无处。它并不指向任何方向,因此您无法找到它与另一个矢量之间的角度。

我想也许你已经定义你的问题很差。您的坐标系是否具有[0 0 0]以外的原点?你是否真的试图找到由ab组成的线与x-y平面之间的夹角?