【问题标题】:Calculate if two 3D triangles are on the same plane计算两个 3D 三角形是否在同一平面上
【发布时间】:2011-04-13 03:25:21
【问题描述】:

对于我正在开发的 3D 游戏引擎,我需要计算两个 3D 三角形是否在同一平面上以相应地显示它。如何计算 3D 空间中三角形的角度?

计算表面法线并比较它们会给我两个等效的法线吗?

【问题讨论】:

  • 能否简单介绍一下您想要达到的渲染效果?
  • 同一平面上的任何三角形都将被渲染为一个平面填充,因此我将计算哪些三角形可以合并为多边形(一次),然后将它们渲染为一个形状(每次渲染)

标签: 3d rotation geometry angle normals


【解决方案1】:

你所问的在数字上是不可能的。舍入误差会使这样的测试完全无关紧要。

但是,您可能想测试“两个三角形是否在同一平面上,是否在某个容差范围内”。这很难做到,而且在这里,舍入错误也可能会弄乱任何可能的方法。事实上,只要三角形很薄,它们所在的平面就会存在很大的不确定性。

如果你真的想要,我可以为你指出一些文献(你最好的办法是查看CGAL 库,看看他们是否实现了与你的问题相关的东西)。任何事情都可能涉及任意精度的浮点数、操作的巧妙重新排序,并且无论如何都会导致不精确的结果。

因此,我强烈建议您为您的实际问题找到另一种方法。

如果您尝试计算通过三个点的平面方程,然后测试其他三个点,则舍入误差是一个(巨大的)问题。还有另一种解决方案。

您可能想要计算您的六个点的inertia matrix,将其对角化并查看其最小特征值是否在其他两个点的某个微小值内。这意味着您的六个点实际上位于同一平面上,且在公差范围内。

【讨论】:

  • 这大致相当于主成分分析吗?
  • @tibur:它主成分分析
【解决方案2】:

你为什么要这样做?您希望测试的三角形数量是多少?实时渲染算法似乎有点复杂!

无论如何:

计算三角形的法线n。然后计算平面方程: a.x + b.y + c.z + d = 0 (a,b,c) 是您的三角形法线,d = - dot(n,P)(P 是您的三角形顶点之一)。对第二个三角形执行相同操作。

如果四个值abcd 相等或相反(全部在一起),则两个平面相同。

【讨论】:

  • @Jenko “发给我 teh codez”,因为你不是数学专家?坦率地说,如果您正在编写 3D 引擎,您应该对用于创建引擎的数学有所了解。否则,您只是在复制和粘贴其他人的解决方案,而不知道他们是否真正解决了您想要完成的任务。
  • 如果你被vectormatrix这个词吓到了,你至少应该读一些像下面这样的3D数学教程,否则你会编写 3D 引擎永远不会成功。 chortle.ccsu.edu/VectorLessons/vectorIndex.html
猜你喜欢
  • 2011-01-25
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
相关资源
最近更新 更多