首页 > 解决方案 > 从坐标列表中查找左下角坐标

问题描述

我有一个坐标列表(圆形对象),我试图在左下角找到对象。

(左上角是 0,0)

我使用的逻辑是“左下圆圈是 X 最小,Y 最大”,它在大多数情况下都有效;

在此处输入图像描述

但在这种情况下它会失败,例如因为左下角坐标(圆)不是 X 值最小的坐标;

在此处输入图像描述

我使用这样的东西,它大部分都有效;

private static int FindBottomLeftCircle(List<Circle> circles)
{
   return circles.IndexOf(circles.OrderBy(c => c.Center.Y).Reverse().Take(13).OrderBy(c => c.Center.X).First());
}

如果底行大约有 13 个圆圈,效果最好。但正如您所看到的,这种方法存在问题。

如何可靠地找到左下角的圆形对象?

标签: c#

解决方案


只是一个想法。当从那个圆绘制到另一个圆的向量与 X 在 (-45, 135) 度范围内成角度时,说一个圆比另一个圆左下角是否正确。然后我们可以通过计算与向量 (1, -1) 的标量积来确定角度是否正确。所以我们需要找到比任何其他都更左下角的圆圈:

    circles.First(x => circles.All(y => y.Center.X - x.Center.X - (y.Center.Y - x.Center.Y) => 0))

推荐阅读