考虑一类Rectangle
由角定义了一个区域:使用的GroupBy到分区设置的重叠范围
public class Rectangle {
public int X1 { get; set; }
public int Y1 { get; set; }
public int X2 { get; set; }
public int Y2 { get; set; }
}
可以说两个Rectangle
对象Overlap
如果他们有共同的任何区域。下面是实现Overlap
逻辑的简单方法:
public bool Overlaps(Rectangle other) {
return (this.X1 < other.X2 && this.X2 > other.X1 &&
this.Y1 < other.Y2 && this.Y2 > other.Y1);
}
现在我想要一套Rectangle
对象分成重叠的矩形组。值得注意的是,组中的某些矩形可能不一定与同一组中的其他矩形重叠,只要它们共享其他重叠的矩形。结果总是定义良好,但没有从矩形到最终重叠组的直接映射。
看起来很直观,应该可以使用GroupBy
构建重叠矩形组。但是,没有定义矩形是否属于同一个组的“键”重要的是它们是否重叠。使用GroupBy
可以解决这个问题,即使这意味着递归分组,直到所有适当的组被合并为止?