2010-12-02 4 views
0

У меня есть две точки, a и b. Мне нужно рассчитать угол между ними, поэтому я отношусь к ним как к векторам. Однако вектор a всегда будет определен как [0 0 0]. Чтение над MATLAB NewsReader, «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 имеет проблемы точности, как тэта приближается к нулю, но из трех уравнений, только acos обеспечивает правильное решение.

Должен ли я продолжать использовать acos или есть лучшее решение?

+1

Что угол между двумя точками? И каков угол между двумя векторами, когда один из них [0 0 0]? – Henrik

+1

Что еще означает найти угол между двумя векторами, где один равен 0? Вы уверены, что не должно быть [1 1 1]? Кроме того, формула с acos действительна только тогда, когда векторы имеют единичную длину, что неверно для не менее. – Xodarap

ответ

-1

Ошибка a = [0 0 0]. Интересующая точка центрируется в начале координат, и для вычисления угла относительно вектора b вам необходимо указать направление движения точки. Это можно сделать, установив a - единичный вектор.

Если точка движется в «х» направлении, то 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 имеет величины и направления, а a и b - это всего лишь координаты точек в пространстве. Когда вы обрабатываете a и b в качестве векторов, вы неявно определяете [0 0 0] как отправную точку для двух векторов. Однако, поскольку точка a находится в [0 0 0], то это будет вектор с нулевой длиной.

Если вектор имеет нулевую длину, в каком направлении он указывает? Ответ нигде. Он не указывает ни в каком направлении, и поэтому вы не можете найти угол между ним и другим вектором.

Возможно, вы плохо определили свою проблему. У вашей системы координат есть происхождение, отличное от [0 0 0]? Вы действительно пытаетесь найти угол между линией, образованной a и b, и плоскостью x-y?

Смежные вопросы