【问题标题】:calculating outward normal of a non-convex polyhedral计算非凸多面体的外法线
【发布时间】:2018-06-14 01:50:08
【问题描述】:

如果一个多面体的所有节点(可能是非凸的)和它们的坐标是已知的,一个面的点是按顺序给出的(逆时针或顺时针围绕外法线),我如何获得外法线每张脸的向量?

这里是凸多面体的一种方法: Computing face normals and winding

一个非凸的一般多面体怎么样?

【问题讨论】:

  • 没有任何研究,我猜最难的部分是计算一张人脸的向量,而不是计算一张人脸的法线向量!?
  • @meowgoesthedog:很好的发现,但根据我的经验,计算射线交叉点(如建议的那样)是一个相当棘手的计算。
  • @JosephO'Rourke 是的,但前提是您打算使用加速结构。一种天真的“循环并检查每个”方法或多或少是微不足道的(因为互联网上有许多 Moller-Trumbore 的代码示例)
  • @meowgoesthedog:当光线穿过顶点、与边共线、与面共面时,必须小心。等等当然可以正确完成。并且有现有的代码,你是对的。

标签: c++ geometry computational-geometry polyhedra


【解决方案1】:

这是一种方法。修复多面体 P 的一个面 F0 的方向。你还不知道这是否 从外面看是逆时针的,所以右手定则给出 从叉积法线向外指向。

现在将相邻面 F1 定向为与 F0 的方向兼容,即 共享边在 F0 中定向为 →,在 F1 中定向为 ←。继续宣传 直到 P 的每个面都与 F0 一致。所以现在一切正常 要么指向内部,要么全部指向外部。

现在通过对有符号四面体体积求和来计算 P 的体积。音量 如果所有面都是逆时针方向,则为正,而为负 如果都是顺时针。如果结果是否定的,则反转所有面部方向。

计算签名卷在整个网络上,包括这里: Computational Geometry in C.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2011-07-28
    • 2021-05-25
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多