如何发现矩形的哪一侧发生碰撞?

时间:2013-11-17 03:56:55

标签: algorithm language-agnostic geometry collision-detection

我一直在努力寻找基本的东西。我想不出有效的数学方法来看待这个问题。我使用的语言是Objective-C,但我几乎可以转换任何语言答案,因为它基本上只是数学。

我有两个正方形,一个是玩家,是一个障碍。玩家可以移动,障碍不能。 最终目标是告诉碰撞时它来自哪一方。例如,当我向下移动时,它会检测到我撞到了障碍物的顶部。

以下是我所知道的:

  1. 在碰撞之前和之后玩家的位置
  2. 是否有任何交叉点
  3. 运动的几乎所有其他方面(速度,定向运动等)
  4. 我会提供尽可能多的信息,但我需要的只是一般方法。似乎有很多方法可以解决这个问题,但每个人都有缺陷:/

    我并不是真的要求代码,虽然这样很好,我只需要一个概念来开始工作。

1 个答案:

答案 0 :(得分:1)

计算障碍物矩形中心的哪一侧是碰撞前玩家矩形的中心。中心是矩形中最大和最小点的平均值。 这可以使用两个中心的x和y坐标的差异来完成。 记得拿下小于l1 / 2 + l2 / 2之和的坐标。 结论: -

    (x1,y1) = center of obstacle
    (x2,y2) = center of player
     dx = y1-y2
     dy = x1-x2

    l1 & l2 are length of side aligned in that direction

    dx<0 && abs(dx)>(l1/2+l2/2) = left of obstacle

    dx>0 && abs(dx)>(l1/2+l2/2) = right of obstacle

    dy<0 && abs(dy)>(l1/2+l2/2) = below

    dy>0 && abs(dy)>(l1/2+l2/2) = above