我有一个矩形列表(xpos,ypos,widht,height):
List<Rectangle> rects = new List<Rectangle>();
此方法可以判断两个矩形是否相交: Rectangle.IntersectsWith()
我想使用linq从列表中获取所有相交的矩形对...这可能吗?
答案 0 :(得分:4)
是!
var intersecting = rects
.SelectMany((x, i) => rects.Skip(i + 1), Tuple.Create)
.Where(x => x.Item1.IntersectsWith(x.Item2))
.ToList();
请注意,这是一个O(n ^ 2)操作,没有某种形式的加速(例如,为每个x和y维度保留Rectangle
的列表,排序,以便您可以执行单个O(n)通过每个维度。)
就个人而言,为了清晰起见,我只是坚持使用典型的嵌套循环:
var intersecting = new List<Tuple<Rectangle, Rectangle>>();
for (int i = 0; i != rects.Count; ++i) {
for (int j = i + 1; j != rects.Count; ++j) {
if (rects[i].IntersectsWith(rects[j]))
intersecting.Add(Tuple.Create(rects[i], rects[j]));
}
}
答案 1 :(得分:0)