-3

我有三点

P0=[x0,y0,z0] 
P1=[x1,y1,z1] 
P2=[x2,y2,z2] 

我想计算出它们的正常值。我所做的是:

normal = cross(P0-P1, P0-P2); 

然后我想绘制法线,所以我所做的是,

c = normal + P0 %end position of normal vector
quiver3(P0(1), P0(2), P0(3), c(1), c(2), c(3));

但它没有用(看起来线和平面之间有一个角度。所以它不正常)。

请问有什么建议吗?

4

1 回答 1

6

“它有一个角度,所以它不是正常的”。有两个问题。

第一个问题 - 您误解了quiver3命令的工作原理。前三个元素是箭袋的开始(箭头的后面),但接下来的三个不是端点(你的normal + P0)——它们是方向。所以我认为您需要将代码更改为

normal = cross(P0-P1, P0-P2);
normal = normal / norm( normal ); % just to make it unit length
figure
quiver3(P0(1), P0(2), P0(3), normal(1), normal(2), normal(3));
axis equal

您可以通过确认点积为零来确认向量是否垂直于您的平面:

disp(dot((P0 - P1, normal));
disp(dot((P0 - P2, normal));

您会期望结果是“非常接近于零的数字” - 舍入误差通常会阻止事物完全为零(将小于向量长度的 1e-16 的任何值视为“零”)。

于 2013-07-30T14:58:58.000 回答