这更像是一个编程问题而不是技术问题,但由于它与编程和数学有关,我希望能得到一些有用的反馈。
我有两个矩形:rectangle1和rectangle2。
两者都由四个浮点值定义:
float left;
float right;
float top;
float bottom;
为了这个例子,假设每个矩形是 100 x 100,矩形 1 是:
float left = 100.0;
float right = 200.0;
float top = 500.0;
float bottom = 600.0;
矩形2是:
float left = 150.0;
float right = 250.0;
float top = 550.0;
float bottom = 650.0;
当发生碰撞时,我试图使用八个浮点值来确定矩形 1 的哪一侧撞到了矩形 2 的哪一侧。
如果我的问题得到了解答,我可能会在发生碰撞时确定以下内容:
矩形 1 的右侧命中矩形 2 的左侧
到目前为止,我已经尝试使用简单的数学来确定每种可能性之间的距离:
float distance1 = rectangle2.left - rectangle1.right;
float distance2 = rectangle2.top - rectangle1.bottom;
float distance3 = rectangle2.right - rectangle1.left;
float distance4 = rectangle2.bottom - rectangle1.top;
然后取这些值中的最小值来确定每个矩形的哪一侧参与了碰撞。不过,这似乎并不那么简单。这种尝试有两个基本问题:
1)到达碰撞代码时,矩形已经重叠。
2)如果多个矩形堆叠在一起,计算会产生奇怪的结果(即,即使矩形1在右上方向移动并且应该击中左侧的两个矩形,它实际上可能会击中左侧的一个矩形底部和左侧的另一个。)
(这是因为到达碰撞代码时矩形重叠,并且在这种情况下距离 1 和距离 4 将接近或相等。)
有没有更好的方法来使用简单的数学来回答这个问题?任何帮助,将不胜感激。
而且,在提到之前,这不是家庭作业,而是我试图为我的游戏解决的一个真正问题。