C#从列表中获取所有AOI,其中包含特定点

时间:2017-03-14 17:00:28

标签: c# lambda ienumerable

我有一个List of AOIs(感兴趣的区域),其中AOI由左上角和右下角两个点(起点和终点)定义。

我有PosX and PosY定义的观点。

我想从列表中获取所有这些AOI,具体点在哪里。我怎样才能最有效地做到这一点?我想用select和lambda表达式的函数来做,但不能弄清楚如何实现它。

我创建了一个边界AOI的矩形,并测试了一个点是否在其中:

var rect = new RectangleF(aoi.Start.X, aoi.Start.Y, aoi.End.X - aoi.Start.X, aoi.End.Y - aoi.Start.Y));
var liesIn = rect.Contains(pt.PosX, pt.PosY);

但我有List<AOIs>。如果我希望列表中包含点pt的所有AOI必须遍历所有列表,或者我能以某种方式有效地执行此操作吗?

编辑:好吧我明白了。这对我有用。

var result = AOIs.Where(a => new RectangleF(a.Start.X, a.Start.Y, a.Start.X - a.End.X, a.Start.Y - a.End.Y).Contains(pt.PosX, pt.PosY)).ToList();

我不知道我在做什么,我做了一些奇怪的事情,但解决方案很简单。

1 个答案:

答案 0 :(得分:1)

我想这样的事情:

AOIs.Where(x => 
    x.Start.X < posX
 && x.Start.Y < posY 
 && x.End.X > posX 
 && x.End.Y > posY)
相关问题