我有一个矩形列表(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/

10-10 04:51