3d 计算两个三维三角形是否位于同一平面上

3d 计算两个三维三角形是否位于同一平面上,3d,rotation,geometry,angle,normals,3d,Rotation,Geometry,Angle,Normals,对于我正在开发的3D游戏引擎,我需要计算两个3D三角形是否在同一平面上,以相应地显示它。如何计算三维空间中三角形的角度 计算一个曲面法线并比较它们会给我两个相等的法线吗?为什么要这样做?您希望测试的三角形数是多少?对于实时渲染算法来说似乎有点复杂 无论如何: 计算三角形的法线n。然后计算平面方程: a.x+b.y+c.z+d=0,其中(a,b,c)为三角形法线,d=-dot(n,P)(P为三角形顶点之一)。对第二个三角形执行相同的操作 如果四个值abcd相等或相反(全部加在一起),则两个平面是相

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


计算一个曲面法线并比较它们会给我两个相等的法线吗?

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

无论如何:

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

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

您所要求的在数字上是不可能的。舍入错误将使此类测试完全不相关

但是,您可能需要测试“如果两个三角形在同一平面上,在某个公差范围内”。这是很难做到的,在这里,舍入错误可能会打乱任何可能的方法。事实上,每当三角形变薄时,它们所在的平面就存在很大的不确定性

如果你真的愿意,我可以给你指一些乱七八糟的东西(你最好看看这个库,看看他们是否实现了一些与你的问题相关的东西)。任何事情都可能涉及任意精度浮点、操作的巧妙重新排序,并且无论如何都会导致不精确的结果

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

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


你们可能想计算六个点的最小值,对角化它,看看它的最小特征值是否在其他两个点的极小值之内。这意味着您的六个点实际上位于同一平面上,在一个公差范围内。

您能简要解释一下您试图达到的渲染效果吗?同一平面上的任何三角形都将渲染为一个平面填充,因此我将计算哪些三角形可以合并为多边形(一次),然后绘制一个形状(每次渲染)@因为你不是数学专家,Jenko就“给我发个电话给codez”?坦白地说,如果你正在编写一个3D引擎,你应该知道一些用于创建引擎的数学知识。否则,你只是在复制和粘贴别人的解决方案,而不知道他们是否真的解决了你想要完成的任务。如果你被vector或matrix这个词吓坏了,你至少应该阅读一些3D数学教程,比如下面的一个,否则你永远也不会成功地编写3D引擎。这大致相当于主成分分析吗?@tibur:这是一种主成分分析