三角形 - 三角交叉测试

fea*_*l87 3 c# math physics collision-detection collision

我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 - 三角形交叉测试.(我不需要知道交叉点发生的确切位置,但只知道交叉点已经发生)

我打算按照理论上的pdf来实现它,但我很沮丧

  1. 三角形的计算平面方程2.
  2. 如果三角形1的所有点都在同一侧,则拒绝为微不足道.
  3. 三角形的计算平面方程1.
  4. 如果三角形2的所有点都在同一侧,则拒绝为微不足道.
  5. 计算交叉线并投影到最大轴上.
  6. 计算每个三角形的间隔.
  7. 相交间隔.

本指南的第5点.我真的不知道要问的是什么(全部是5,6和7).XD

因为我对数学知之甚少(嗯,我知道大学的几门考试给了我(我是一名原始程序员XD)),请尽量让我尽可能简单.:D(我试图在谷歌搜索,但大多数链接指向大约4-5页的公式,我真的不知道,我不明白.)

谢谢您的帮助

Eri*_*ert 12

你说:

我想知道是否有一些教程或指南来理解和实现3D环境中的三角形 - 三角形交叉测试.

然后你说:

大多数链接指向大约4-5页的公式,我真的不在乎

我注意到这两个陈述完全相互矛盾.那是哪个呢?您想了解三角形 - 三角形交叉点的工作原理,还是只想要一个有效但无法理解的实现?

这并不像所有那些网页都充满了不必要的数学.所有数学都是理解交集算法如何工作所必需的.从头开始,了解所有工作原理.

一旦你知道单词的含义,步骤5,6和7就很容易理解.交叉线是两个平面的交点所形成的线.每个三角形都在一个平面上.有三种情况:

  • 这些平面是平行的,不相交.三角形显然不相交.
  • 飞机是同一架飞机.三角形可能会遇到也可能不会.
  • 飞机是两个不同的飞机,在一条线上相遇.如果三角形相交,它们显然必须在该线上相交.

假设我们处于第三种情况.计算第一个三角形中包含的交叉线的线段.计算第二个三角形中的交叉线的线段.现在的问题是"这些细分是否重叠?"

您可以通过将线段投影到方便的轴上,并查看该轴上的线段是否重叠来解决这个问题.基本上,它的工作方式如下:想象一下你在线段上照射一个光线,使它们的阴影落在一个轴上.如果轴上的阴影相交,则线段必须相交.如果轴上的阴影之间存在间隙,则显然线段之间必须存在间隙,因此三角形不相交.

如果你想了解它是如何工作的,那么就无法理解你需要了解所有这些东西 - 所有代数都能解决平面如何相交以及项目如何在轴上工作.这一切都是必要的.所有这些东西都是基本构建块,其中将构建更复杂的转换,投影等,因此如果您想要更进一步,请彻底了解基础知识.

  • @feal87:这里的重要教训是学习如何从呈现的公式中提取洞察力.也就是说,既然已经向您解释了公式背后的见解,您是否可以通过公式来查看这些见解?您是否可以利用这种经验在未来提取自己的见解? (2认同)