0

我有一个数据集的二维分布,我想找到这些点的重心。

我想做的就像下面的代码,

#include <stdio.h>

#define SIZE 4

struct point {
 short x;
 short y;
};

point find_gravitation(struct point set[], unsigned char size)
{
  point ret;
  .
  .
  .
  ?
  .
  .
  .
  return ret;
}

int
main(int argc, char **argv)
{
 struct point dataset[SIZE];
 struct point ret;

 dataset[0].x = 12;
 dataset[0].y = 24;

 dataset[1].x = 3;
 dataset[1].y = 5;

 dataset[2].x = 71;
 dataset[2].y = -6;

 dataset[3].x = -185;
 dataset[3].y = -26;

 ret = find_gravitation(dataset, SIZE);

 printf("gravitation center is: %d, %d\n", ret.x, ret.y);

 return 0;
}

我如何计算这个集合的重心?

4

2 回答 2

5

如果我正确解释这一点:

因为您的点未加权,所以中心点将是:(avg(x), avg(y))。

要计算平均 x 点,请将所有 x 值相加并除以点数。要计算平均 y 点,请将所有 y 值相加并除以点数。

于 2012-04-11T19:59:29.593 回答
1

To find the gravitation center, you need the weight as well. assuming weight to be set[i].w, your function must be modified to return the point structure with x=average of all set[i].x, y=average of all set[i].y and w=sum of all set[i].w.

于 2012-04-11T20:09:02.757 回答