Java 检测两个三维平面之间的碰撞

Java 检测两个三维平面之间的碰撞,java,3d,lwjgl,collision,Java,3d,Lwjgl,Collision,我正在用lwjgl用java编写一个游戏。基本上我有两个计划,我想检查它们是否相交,如下图所示 我有每架飞机的四个点,有人能帮我吗。我不能证明这是足够的,但我相信这三个测试应该足够了: 两架飞机 将每个平面投影到x轴上,检查是否有重叠 将每个平面投影到y轴上,检查是否有重叠 将每个平面投影到z轴上,检查是否有重叠 如果这三种情况中的任何一种都没有重叠,则平面不相交。否则,, 两个平面相交 如果您不确定如何投影到轴上或计算重叠,请告诉我。另外,如果这三项测试不够,请告诉我 编辑1: 算法:你实际

我正在用lwjgl用java编写一个游戏。基本上我有两个计划,我想检查它们是否相交,如下图所示


我有每架飞机的四个点,有人能帮我吗。

我不能证明这是足够的,但我相信这三个测试应该足够了:

两架飞机

  • 将每个平面投影到x轴上,检查是否有重叠
  • 将每个平面投影到y轴上,检查是否有重叠
  • 将每个平面投影到z轴上,检查是否有重叠
  • 如果这三种情况中的任何一种都没有重叠,则平面不相交。否则,, 两个平面相交

    如果您不确定如何投影到轴上或计算重叠,请告诉我。另外,如果这三项测试不够,请告诉我

    编辑1:

    算法:你实际上不需要投影,你只需要找到最大范围。让我们以x轴为例。可以在平面1上找到最小x值,在平面1上找到最大x值。接下来,您将找到平面2上的最小x值和平面2上的最大x值。如果它们的范围重叠(例如,[1,5]与[2,9]重叠),则与x轴上的投影重叠。请注意,如果平面段的边与x轴不平行,则查找x值的范围可能不容易。如果你处理的是更复杂的平面段,没有平行于轴的边,我真的帮不了你。您可能需要使用矩阵之类的其他工具

    顺便说一下,这个测试叫做分离轴测试。我认为x、y和z轴测试应该足以测试相交的平面段

    来源:(书)游戏物理引擎开发:如何为你的游戏建立一个强大的商业级物理引擎(第二版)

    编辑2:


    实际上,您需要检查更多的轴。

    如果两个平面平行(而不是同一平面),则这两个平面不相交

    p1
    p2
    p3
    p4
    作为定义平面的4个点,
    n=(a,b,c)
    计算为
    n=交叉(p2-p1,p3-p1)
    的法向量。平面方程是

    ax + by + cz + d = 0
    
    其中
    d=-dot(n,p1)

    你有两架飞机

    ax + by + cz + d = 0
    a’x + b’y + c’z + d’ = 0
    
    它们是平行的(且不相同)


    当您实现此谓词时,您必须检查被0除的可能重复项。。。我想我理解这个概念,但我如何投影到轴上并计算重叠。谢谢:)对不起,我认为应该是x-y、x-z和y-z平面,而不是x-y和z轴。让我想想如何做这些投影和重叠,如果我想到的话,我会让你知道的。实际上,不管是平面。当我回顾一本书的时候,它实际上是轴,我已经加入了书中的方法基本上说的内容。这不起作用。这会起作用,但因为第二个平面是倾斜的,所以不起作用。斜平面被视为一个立方体。谢谢你。我会像你说的那样研究矩阵。是的,我意识到你需要更多的轴。我做了盒子和盒子的碰撞,也许,你可以把飞机当作一个非常薄的盒子。这将需要15个轴进行测试。这都是假设你的平面不是无限平面,对吗?
    a/a’ == b/b’ == c/c’ != d/d’