2010-09-16 89 views
4

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

会计算表面法线和比较这些给我2当量法线?

+0

您能否简要介绍一下您试图实现的渲染效果? – tibur 2010-09-16 13:50:52

+0

同一平面上的任何三角形都将渲染为一个平面填充,因此我将计算哪些三角形可以合并为多边形(一次),然后渲染它们以绘制一个形状(每个渲染) – 2010-09-16 16:09:43

回答

3

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

反正:

计算三角形的正常n。然后计算平面方程: a.x + b.y + c.z + d = 0(a,b,c)是你的三角法线和d = - dot(n,P)(P是你的三角形顶点之一)。对第二个三角形做同样的事情。

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

+0

这对于所有可能的四舍五入非常敏感错误。 – 2010-09-16 12:21:21

+2

@Jenko“发送给我teh codez”是因为你不是数学专家?坦率地说,如果你正在编写3D引擎,你应该对用于创建引擎的数学有所了解。否则,你只是复制和粘贴其他解决方案而不知道他们是否真正解决了你想要完成的任务。 – 2010-09-16 20:58:30

+2

如果您被*矢量*或*矩阵*这个词吓倒了,您至少应该阅读一些3D数学教程,或者您将不会成功编写3D引擎。 http://chortle.ccsu.edu/VectorLessons/vectorIndex.html – tibur 2010-09-17 07:23:21

2

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

但是,您可能想要测试“如果两个三角形在同一平面上,在一定的容差范围内”。这是很难做到的,在这里,舍入误差也可能会混淆任何可能的方法。事实上,每当三角形很薄时,他们所住的飞机就会有很大的不安。

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

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

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

你可能想要计算你的6个点的inertia matrix,对它进行对角化,看它的最小特征值是否在另外两个点的某个微小值内。这意味着你的六点实际上位于同一架飞机上,在一个容差范围内。

+0

这大致相当于主成分分析吗? – tibur 2010-09-17 07:28:11

+0

@tibur:它*是一个主成分分析 – 2010-09-17 09:20:35