3D空间中的角度计算

时间:2015-05-08 08:27:38

标签: matlab

我有两条线的终点,我需要找到这两条线之间的角度。

同样地,我在Excel表格中有60个这样的点,我需要找到连接这60个点的线之间的角度。我需要找到这些线段之间的角度。

我想在MATLAB中这样做:

D = xlsread('45_A.xls');
CosTheta = dot(D(i,:),D(i+1,:))/(norm(D(i,:))*norm(D(i+1,:)));
xlswrite('45_Aav',CosTheta);

我编写的这个程序在excel表中重复了60个值,即我把它放在一个循环中。但是正在计算一些错误的值,即虚数和实数值中的角度值写在excel表中。我认为计算部分存在一些问题。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

两个向量u和v之间的角度度可以计算为

180/pi*acos(dot(u,v)/(norm(u)*norm(v)))

我在以下随机生成的60个向量集上测试了这个,遵循以下公式:

D = (10*rand(60,3)-5);    % random matrix 60 by 3
for i=1:size(D,1)-1 
    angleInDegrees = 180/pi*acos(dot(D(i,:),D(i+1,:))/(norm(D(i,:))*norm(D(i+1,:))));
    disp(angleInDegrees);
end

没有获得虚数值。

以上假设D中包含的向量是您想要找到角度的向量。如果您拥有的数组包含点P,并且您想要在连接这些点的线之间找到角度,则首先需要减去相邻点的坐标。像这样:

points = (10*rand(60,3)-5);   % random matrix 60 by 3
D = diff(points,1);           % differences between consecutive rows

其余如上所述。