矩形棱镜碰撞

时间:2011-06-01 21:35:38

标签: java math geometry

我想制作一个游戏,其中角色是可以旋转的矩形棱镜,而地图的其余部分是轴对齐的矩形棱镜。除了角色之外的所有东西都是静态的,所以我想知道什么是最好的算法来查找角色是否与地图中的任何部分发生碰撞。任何教程/代码/建议将非常感激:)

此外,如果有帮助,角色将仅在Y轴上旋转。

2 个答案:

答案 0 :(得分:0)

我认为测试这种情况的一种方法是检查16个线路交叉点:

http://www.math.niu.edu/~rusin/known-math/95/line_segs

如果你想进行优化,你还可以检查矩形是否没有重叠的可能性,即如果所有角都在另一个矩形的右/左/上/下。

修改

以下评论。

答案 1 :(得分:0)

在特殊情况下,角色仅绕其平行于Y轴的轴旋转,与另一个轴对齐的矩形棱镜的碰撞检测减少到:

  1. 检查角色的Y间隔是否与另一个棱镜的Y间隔相交。

  2. 检查两个棱镜的相应XZ横截面是否相交,这相当于两个旋转矩形之间的碰撞检测问题。

  3. 如果以上两者的答案都是肯定的,那么只有棱镜重叠。

    将特定问题减少到重叠间隔和交叉(旋转)矩形的问题后,每个任务都有许多好的代码资源。第一项任务非常简单:

    重叠间隔

    两个闭合间隔[a,b]和[c,d]相交,只有c≤b且a≤d。在这里,我们还假设间隔符号是一致的,即a≤b和c≤d(否则必要时交换端点)。

    相交旋转的矩形

    对此特定问题的高度评价的答案是here。我为一个稍微更普遍的问题Shortest distance between two rectangles编写的Lua实现包括我提到的{早期退出'优化(矩形中的边界圆和顶点)on this thread。如果旋转的矩形相交,我的Lua代码返回“false”,否则返回它们之间的距离。对于Java目的,碰撞情况下的返回值为零。