计算非凸多面体的外法向量

4
如果已知多面体(可以是非凸的)的所有节点及其坐标,并按顺序给出面的点(逆时针或顺时针绕着外法线),如何获得每个面的外法向量?
以下是一种计算凸多面体面法向量和卷绕方向的方法: 计算面法向量和卷绕方向 对于可能是非凸的一般多面体,该怎么办?

没有任何研究的情况下,我猜难点在于计算哪些向量形成一个单独的面,而不是计算单个面的法向量! - xander
可能是如何计算一个盒子的法线?的重复问题。 - meowgoesthedog
@meowgoesthedog:找得不错,但是根据我的经验,计算射线相交数(如建议的那样)是一项相当棘手的计算。 - Joseph O'Rourke
@JosephO'Rourke 如果您打算使用加速结构,那么是的。一个天真的“循环并检查每个”方法将是比较琐碎的(因为互联网上有许多Moller-Trumbore的代码示例)。 - meowgoesthedog
@meowgoesthedog:当光线穿过一个顶点、与一条边共线、与一个面共面时,必须小心。当然,这可以正确地完成。而且已经存在代码,你是对的。 - Joseph O'Rourke
如果您有一个多面体数据结构,其中面可以作为一致逆时针或顺时针的边序列提取,则这是一个非常研究充分的问题。经典解决方案是Newell算法:https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal - Gene
1个回答

2
这里有一种方法。固定多面体 P 的一个面 F0 的方向。您还不知道它是否逆时针从外部开始,以使右手法则从叉积得出的法线指向外部。
现在将相邻的面 F1 定向为与 F0 的方向兼容,即共享边缘在 F0 中定向为 →,在 F1 中定向为 ←。继续传播面的定向,直到每个面都与 F0 一致。因此,现在所有法线要么指向内部,要么指向外部。
现在通过求和已签名四面体的体积来计算 P 的体积。如果所有面都按逆时针方向定向,则体积为正,如果所有面都按顺时针方向定向,则体积为负。如果结果为负数,请反转所有面的方向。
计算已签名体积的方法已经在网络上广泛流传,包括这里:C语言中的计算几何

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接