我有一个List of AOIs (感兴趣的区域),其中AOI由2点、左上角和右下角(开始点和结束点)定义。
我有一个由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,我必须遍历所有的列表,或者我能以某种方式有效地完成它吗?
编辑:,ok,我想出来了。这对我有用。
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();我不知道我在做些奇怪的事情,但解决办法很简单。
发布于 2017-03-14 17:10:14
我想是这样的:
AOIs.Where(x =>
x.Start.X < posX
&& x.Start.Y < posY
&& x.End.X > posX
&& x.End.Y > posY)https://stackoverflow.com/questions/42792137
复制相似问题