gpt4 book ai didi

algorithm - 如何有效地确定 3D 空间中多边形的法线?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:13 25 4
gpt4 key购买 nike

我有一堆共面点在 3D 空间中定义多边形。这些总是以相同的方式缠绕(例如顺时针)。我需要确定包含此多边形的平面的带符号法线,即,知道该多边形“朝上”的方向。

乍一看这似乎很简单:取两条边(顶点差)并计算叉积。但是,如果边缘恰好是共线的(你得到一个零幅度的叉积),那将失败。

然后我尝试遍历顶点列表,直到找到与第一条边成相当大角度的第二条边。这在凸多边形上可靠地工作,但如果我最终得到的两条边没有定义多边形内部的三角形,它可能会在非凸多边形上失败(指向相反的方向)。

我知道,如果我先对多边形进行三角剖分,那么我就可以轻松可靠地检查任何三角形的面...但问题是我的三角剖分库需要知道平面法线。所以,先有蛋,后有鸡。

如何在非凸多边形中选取两条边(或三个顶点)来可靠地定义多边形面向的方向?

最佳答案

如果我是你,我会用下面的方式来做:

  1. 选择多边形附近的任何点 C(任何顶点或质心)。
  2. 对所有i(包括最后和第一个点对)求和(P[i] - C) x (P[i+1] - C) .
  3. 归一化和向量。

请注意,在第 2 步之后,您将获得一个具有正确方向的法线方向的向量,其大小为 2 S,其中 S 是多边形的面积。这就是为什么它应该起作用,除非您的多边形面积为零或几乎为零。

顺便说一句,这里使用 C 点只是为了让距离原点较远的小多边形的计算更加精确。您可以选择 C = 0,有效地将其从计算中移除。

关于algorithm - 如何有效地确定 3D 空间中多边形的法线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com