C#实现矩形重叠判定(一个新矩形,多个老矩形,一个原始矩形范围,验证新矩形是否与老矩形重叠并且不超过原始矩形范围)
时间: 2024-09-23 22:12:16 浏览: 71
在C#中,你可以通过比较每个老矩形(Rectangle 对象)的边界与新矩形以及原始矩形范围的边界来判断是否存在重叠并保持在原始范围内。以下是一个简单的步骤说明:
1. **创建矩形类**(Rectangle.cs):
```csharp
public class Rectangle
{
public int X { get; set; }
public int Y { get; set; }
public int Width { get; set; }
public int Height { get; set; }
// 构造函数和重叠检查方法等...
}
```
2. **矩形重叠判定方法**:
```csharp
// 判断两个矩形是否重叠
public bool Overlap(Rectangle oldRect, Rectangle newRect)
{
return !(oldRect.X > newRect.Right || oldRect.Y > newRect.Bottom ||
oldRect.Right < newRect.X || oldRect.Bottom < newRect.Y);
}
// 检查新矩形是否在原始矩形范围内
public bool WithinOriginalRange(Rectangle newRect, Rectangle originalRange)
{
return newRect.X >= originalRange.X && newRect.Y >= originalRange.Y &&
newRect.Width + newRect.X <= originalRange.Right &&
newRect.Height + newRect.Y <= originalRange.Bottom;
}
// 主要方法:判断新矩形与所有老矩形的重叠情况
public bool IsNewRectValid(Rectangle[] oldRectangles, Rectangle newRect, Rectangle originalRange)
{
foreach (Rectangle oldRect in oldRectangles)
{
if (Overlap(oldRect, newRect) && WithinOriginalRange(newRect, originalRange))
return false; // 如果找到重叠且超出范围,立即返回false
}
return true; // 如果没有不符合条件的情况,则返回true
}
```
3. **使用示例**:
```csharp
Rectangle[] oldRectangles = ... // 老矩形数组
Rectangle newRect = ... // 新矩形
Rectangle originalRange = ... // 原始矩形范围
bool isValid = IsNewRectValid(oldRectangles, newRect, originalRange);
if (!isValid)
{
Console.WriteLine("新矩形与旧矩形重叠并超出了原始范围");
}
else
{
Console.WriteLine("新矩形可以接受");
}
```
阅读全文