Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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
C# 如果与另一个矩形对象相交,如何处理矩形对象的四条边?_C#_Wpf_Rect - Fatal编程技术网

C# 如果与另一个矩形对象相交,如何处理矩形对象的四条边?

C# 如果与另一个矩形对象相交,如何处理矩形对象的四条边?,c#,wpf,rect,C#,Wpf,Rect,我必须有两个矩形对象。其中一个不能移动,另一个正在移动。我想在它与两边的第一个相交时处理它。比如: if (rect1.IntersectsWith(rect2)) { if (rect1.Top == rect2.Bottom) { ... } else if (rect1.Bottom == rect2.Top) { ... } else if (rect1.Left == rect2.Right

我必须有两个矩形对象。其中一个不能移动,另一个正在移动。我想在它与两边的第一个相交时处理它。比如:

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)
    {
        ...
    }
}
if(rect1.IntersectsWith(rect2))
{
//假设正Y表示向下方向
if(rect1.Top=rect2.Top)
{
...
}
else if(rect1.Left=rect2.Left)
{
...
}
}

首先,“重叠”并不一定意味着边缘彼此完全接触。。。检查一条边==另一条边可能不是正确的逻辑。然而,我真的不明白你问题的其余部分。你想完成什么?只是尝试一些简单的事情。例如:如果rect2击中rect1的顶部,然后将rect1向底部移动一些像素,其他侧面也一样。不幸的是,它仍然给我错误的结果。Exmaple当它击中右侧时,rect1.Top可以比rect2.Bottom小,处理起来就像击中rect1的顶部一样。有什么想法吗?条件有问题。您使用的是
else if
,这意味着当矩形相交时,只会触发其中一个条件。如果要立即检查每一个,请删除
else