我有一个矩形列表(xpos,ypos,widht,高度):
List<Rectangle> rects = new List<Rectangle>();
此方法可以判断两个矩形是否相交:
Rectangle.IntersectsWith()
我想使用linq从列表中获取所有相交的矩形对...这可能吗?
最佳答案
是!
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]));
}
}
关于c# - 查找所有与linq相交的矩形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32091997/