我有一个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();
我不知道我在做什么,我做了一些奇怪的事情,但解决方案很简单。
答案 0 :(得分:1)
我想这样的事情:
AOIs.Where(x =>
x.Start.X < posX
&& x.Start.Y < posY
&& x.End.X > posX
&& x.End.Y > posY)