【发布时间】:2016-11-05 01:19:09
【问题描述】:
enter image description here有据可查的是,要找到两个平面之间的交角,我们使用垂直于每个平面的法向量的点积 - 然后给出角度的余弦。我尝试对此进行编程,但意识到在某些情况下,计算结果是补充而不是相交角本身。 下面是两个示例代码,显示了这一点:
x = linspace(-10,20, 12)
y1 = (0*x) + 9
y2 = -x + 19
figure
k = plotyy(x,y1, x,y2);
set(k(2),'YDir','reverse')
%vectors and normal vectors
n1 = [0, 1];
v1 = [1, 0];
n2 = [1, 1];
v2 = [1, -1];
angle = (acos(dot(v1, v2) / (norm(v1) * norm(v2))) * 180/pi)
第二个:
x = linspace(-10,10, 12);
y1 = -(0.5*x) + 1.333;
plot(x, y1); hold on
%2nd line
xd = 5;
plot(xd, x, 'o')
%vectors and normal vectors
n1 = [0.5, 1]; v1 = [1, -0.5];
n2 = [-5, 0]; v2 = [0, 5];
angle = (acos(dot(v1, v2) / (norm(v1) * norm(v2))) * 180/pi)
请注意,第一个示例计算了正确的角度(45 度),但第二个示例计算了补角(116.5651 度)。在多次尝试破解这个问题后,我意识到如果一个法线指向正方向,而另一个法线指向负方向(见图 A)。然后:角度 = 180 -(acos(dot(n1, n2) / (norm(v1) * norm(v2)))) * 180/pi。但是,如果 n1 和 n2 都指向同一个方向(正或负),如图所示。 B、则:角度 = acos(dot(n1, n2) / (norm(v1) * norm(v2)))) * 180/pi
我已经用几个例子对此进行了测试,我相信这个约定在所有情况下都适用。我也很确定这对那里的许多人会有用。尽管如此,对我来说,问题是如何编程。任何建议/帮助/建议将不胜感激。谢谢!
【问题讨论】:
-
你能给出输出与预期输出的对比吗?
标签: matlab geometry linear-algebra