我有三点
P0=[x0,y0,z0]
P1=[x1,y1,z1]
P2=[x2,y2,z2]
Run Code Online (Sandbox Code Playgroud)
我想计算它们的正常值.我做的是:
normal = cross(P0-P1, P0-P2);
Run Code Online (Sandbox Code Playgroud)
然后我想绘制正常,所以我做的是,
c = normal + P0 %end position of normal vector
quiver3(P0(1), P0(2), P0(3), c(1), c(2), c(3));
Run Code Online (Sandbox Code Playgroud)
但它没有用(看起来线和平面之间有一个角度.所以这不正常).
有什么建议吗?
"它有一个角度所以它不正常".有两个问题.
第一个问题 - 你误解了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
Run Code Online (Sandbox Code Playgroud)
您可以通过确认点积为零来确认向量是否与平面垂直:
disp(dot((P0 - P1, normal));
disp(dot((P0 - P2, normal));
Run Code Online (Sandbox Code Playgroud)
你会期望结果是"非常接近于零的数字" - 舍入误差通常会使事物完全为零(考虑任何小于1e-16的值比矢量长度小"0").
| 归档时间: |
|
| 查看次数: |
4268 次 |
| 最近记录: |