找到两条给定线2D之间的角度

时间:2015-12-03 13:17:44

标签: matlab

我得到4分作为输入。

p1 =(x1,y1),p2 =(x2,y2),p3 =(x3,y3),p4 =(x4,y4)。

现在我已经计算了p1p2,p2p3,p3p4和p4p1之间的距离。

如何计算p1p2和p2p3之间的角度?这是角度p2。 (如下图所示);

我试过这个

 acos((p1p2)^2 + (p2p3)^2 - (p1p3)^2)/(2*p1p2*p2p3))*(180/pi)

但这不准确,我想总结4个角度并检查它们是否总和为360.这样我就永远不会得到无理数。

请帮忙吗?

2 个答案:

答案 0 :(得分:3)

要获得两个向量之间的角度,只需使用它们的内积:

v1 = p1-p2;
v2 = p3-p2;

标准化为单位向量并采用内积:

n1 = v1/norm(v1);
n2 = v2/norm(v2);

cos_p2 = dot(n1,n2);

结果角度为

acos(cos_p2)

答案 1 :(得分:1)

在数学上,角度为acos(dot(||p2p1||, ||p2p3||))。尝试

u21 = (p1 - p2) / norm(p1 - p2)
u23 = (p3 - p2) / norm(p3 - p2)
angle = acos(sum(u21 .* u23))

前缀u表示单位向量。