从3点计算法线

时间:2013-07-30 14:35:54

标签: matlab vector

我有三点

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));

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

有什么建议吗?

1 个答案:

答案 0 :(得分: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的值比矢量长度小“0” )。