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
。