Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 如何获取两个矩形的哪条边发生碰撞_Geometry_Computational Geometry - Fatal编程技术网

Geometry 如何获取两个矩形的哪条边发生碰撞

Geometry 如何获取两个矩形的哪条边发生碰撞,geometry,computational-geometry,Geometry,Computational Geometry,我有一个几乎可以工作的物理系统。当两个对象碰撞时,每个对象都将调用其OnCollide函数,以便对碰撞做出正确反应 我的问题是如何正确处理x和y的碰撞。我知道矩形的一条边只能与另一条矩形的一条边碰撞。然而,我不知道数学来确定它是哪条边 那么,如果我只知道每个矩形的x、y、高度和宽度,我如何告诉矩形1哪个边与矩形2发生冲突 顺便说一句,我在c语言中工作经过一点尝试和错误,我终于找到了一个解决方案 首先,检查碰撞发生在哪个轴上最多。一旦确定了这一点,您只需比较该轴上的值,以查看其发生的方向。下面的p

我有一个几乎可以工作的物理系统。当两个对象碰撞时,每个对象都将调用其OnCollide函数,以便对碰撞做出正确反应

我的问题是如何正确处理x和y的碰撞。我知道矩形的一条边只能与另一条矩形的一条边碰撞。然而,我不知道数学来确定它是哪条边

那么,如果我只知道每个矩形的x、y、高度和宽度,我如何告诉矩形1哪个边与矩形2发生冲突


顺便说一句,我在c语言中工作

经过一点尝试和错误,我终于找到了一个解决方案

首先,检查碰撞发生在哪个轴上最多。一旦确定了这一点,您只需比较该轴上的值,以查看其发生的方向。下面的psudocode在翻译成您选择的语言时应该很好

if absoluteValue(box1.y - box2.y) > absoluteValue(box1.x - box2.x)
   if box1.y > box2.y
    box 1 is collding with the top of box 2
    else
        box 1 is colliding with the bottom of box 2
else
   if box1.x < box2.x
    box 1 is collding with the left of box 2
    else
    box 1 is collding with the right of box 2

这并没有考虑盒子的高度和宽度,但我认为在大多数情况下这不应该是一个问题。尽管你可能会遇到一些问题,比如如何处理轴线上尺寸相差很大的矩形。

矩形可以旋转吗?如果没有,XaXb+Wb会告诉您,矩形A是否至少有一个点位于B的左右两侧。类似地,对于Y,它们不能旋转,但由于它是一个实时碰撞引擎,一旦矩形重叠,它就会检查碰撞。因此,如果它发生碰撞,它至少会在两个轴的内部。解决方法在于我之前的评论。注意这样的情况,即一个矩形完全位于另一个矩形内。