2010-12-02 3 views
0

두 점, ab이 있습니다. 나는 그들 사이의 각도를 계산해야하므로 벡터처럼 취급합니다. 그러나 벡터 a은 항상 [0 0 0]으로 정의됩니다. 다양한 MATLAB 뉴스 리더상에서 판독 "Angle between two vectors는"세 가지 솔루션이 제공된다 : 세타가 제로에 가까워 아직 세 방정식에서 단지 acos가 정확한 솔루션을 제공하기 때문에 정밀도에 문제가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있다.

acos을 계속 사용해야합니까, 아니면 더 좋은 해결책이 있습니까?

+1

? 두 벡터가 [0 0 0] 일 때 두 벡터 사이의 각은 무엇입니까? – Henrik

+1

하나가 0 인 두 벡터 사이의 각도를 찾는 것은 무엇을 의미합니까? a [1 1 1]이 아니어야합니까? 또한, acos가있는 수식은 벡터의 단위 길이가 유효 할 때만 유효하며 적어도 길이는 사실이 아닙니다. – Xodarap

답변

-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

vector은 크기와 방향이 있으며, ab은 공간의 좌표 점에 불과합니다. ab을 벡터로 처리하면 [0 0 0]을 두 벡터의 원점으로 암시 적으로 정의합니다. 그러나 점 a[0 0 0]에 있기 때문에 길이가 0 인 벡터가됩니다.

벡터의 길이가 0 인 경우 방향은? 대답은 어디에도 없습니다. 어떤 방향을 가리 키지 않으므로 다른 벡터와의 각도를 찾을 수 없습니다.

아마도 문제를 잘못 정의했다고 생각합니다. 좌표계의 원점이 [0 0 0]이 아닌가요? ab이 형성하는 선과 x-y 평면 사이의 각을 실제로 찾으려고합니까?

관련 문제