寻找C#二维坐标数组的中心点

12

是否有一种公式可以平均所有x,y坐标并找到它们的中心位置。

我有100x100个正方形,在里面有大量的1x1红色和黑色点,我想确定哪个红点在中间。

我研究了最佳拟合线公式,但我不确定这是否是我需要的。

有时所有的红色点都会在一边或另一边。我想要基本上画一条线然后找到该线的中心点,或者仅仅找到红色正方形的中心点,基于100x100的网格。


你想要“中位数”还是“平均数”?如果计算出的中心点不在红点之一上怎么办? - Chris Sinclair
它是浮点数,所以不重要,或者可以四舍五入。我认为平均值或中位数都可以。 - Vans S
不,我的意思是如果你有两个红点(-10,0)和(10,0),中心点是(0,0),但显然没有红点在(0,0),那会发生什么? - Chris Sinclair
1
一组数字的平均值不一定存在于该组数字中。{1、3、8}的平均值(均值)为6,但中位数为3。编辑:而@ChrisSinclair比我快了11秒。 - Bobson
@Bobson 是的,但你说得更好。 - Chris Sinclair
显示剩余4条评论
3个回答

22
List<Point> dots = new List<Point>();
int totalX = 0, totalY = 0;
foreach (Point p in dots)
{
    totalX += p.X;
    totalY += p.Y;
}
int centerX = totalX / dots.Count;
int centerY = totalY / dots.Count;

9
只需分别计算 x 坐标和 y 坐标的平均值,结果就是“中心”的坐标。

我不太擅长数学。我需要执行 itr = 0; itr++; {x += x[itr]; y += y[itr]; x, y = x / x.count(), y / y.count();} 吗? - Vans S
2
假设你使用的是C#而不是C++,那么代码将如下所示:new Point(points.Average(p => p.X), points.Average(p => p.Y));。 这里假设 points 是一个 Point 对象的列表,且每个 Point 都有 XY 属性。如果你有一个int数组的数组,则代码应为:var X = points.Average(p => p[0]); var Y = points.Average(p => p[1]); - Bobson

0

如果有两个或更多的红点子集怎么办?您想让黑点在其中吗?

否则,如果我理解您的问题,只需将红点权重设为1,黑点权重设为0。然后对X和Y坐标进行加权平均。


在LaTeX中:$x = \sum\frac{x_i*w_i}{\sum w_i}$。y也是同样的方法,但使用y_i。其中$x_i$和$y_i$是第$i$个点的坐标,$w_i$是1(如果为红色)或0(如果不是)。 - user1012750

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接