【问题标题】:Calculating the normal from 3 points [closed]从3点计算法线[关闭]
【发布时间】:2013-07-30 14:35:53
【问题描述】:

我有三点

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

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

有什么建议吗?

【问题讨论】:

  • “没有工作”是什么意思?我建议您添加一个示例:P0P1P1 的值以及您的 quiever3 输出的屏幕截图。
  • 完整代码可能会帮助我们帮助您,以及您工作区的内容。什么“不起作用”意味着顺便说一句?你收到错误了吗?

标签: matlab vector


【解决方案1】:

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

第一个问题 - 您误解了 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 的任何值视为“零” )。

【讨论】:

  • dotprodut 不为零,它是 -1.084202172485504e-019
  • 好!那是“零到舍入误差”。它是 -0.0000000000000000000108 。几乎可以容纳任何东西。当您将坐标区设置为 equal 时,情况如何?
猜你喜欢
  • 1970-01-01
  • 2013-02-15
  • 2010-12-30
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多