繁体   English   中英

与另一个相交时如何处理矩形物体的四个侧面?

[英]How to handle the 4 sides of rect object in case of intersectsWith another one?

我必须2个rect对象。 其中一个不能动,另一个可以动。 当它与每侧的第一个相交时,我想处理。 就像是:

if (rect1.IntersectsWith(rect2))
 {
     if (rect1.Top == rect2.Bottom)
     {
      ...
     }
     else if (rect1.Bottom == rect2.Top)
     {
      ...
     }
     else if (rect1.Left == rect2.Right)
     {
      ...
     }
     else if (rect1.Right == rect2.Left)
     {
      ...
     }
 }

这给我一个不准确的结果。 任何想法?

看来您已经有了确定两个矩形是否碰撞的方法,这很好,因为这使您的工作更加轻松。 您现在要做的就是确定碰撞发生在哪一侧,然后采取相应的措施。

如果是这样,那么您已经在正确的轨道上。 但是,您检查的逻辑有些错误。 您正在检查一个边缘是否正好在另一边缘的顶部 在大多数应用中,这实际上很少见。 您应该检查的是是否存在任何重叠,您需要使用<=>=比较器。

if (rect1.IntersectsWith(rect2))
{
    // assumes that positive Y signifies downward direction
    if (rect1.Top <= rect2.Bottom)
    {
        ...
    }
    else if (rect1.Bottom >= rect2.Top)
    {
        ...
    }
    else if (rect1.Left <= rect2.Right)
    {
        ...
    }
    else if (rect1.Right >= rect2.Left)
    {
        ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM