计算几何--- 求多边形的重心

任意多边形重心

 

   首先,我们从最简单的三角形入手, 三角形的重心就是三条中线的交点,他的位置是((x1 + x2 + x3) / 3 , (y1 + y2 + y3) / 3 ) (假设三角形三个点坐标分别为(x1, y1) ,

(x2, y2), (x3, y3))。 那么, 对于 n 边的凸多边形, 我们总能把它分成不相交的 (n - 2) 个 三角形,并能求出各个重心。下面介绍几种求多边形重心的方法:

    线垂法:

     具体方法是:用细线提起该物体,在该物体上画细线的延长线,再移位用细线提起该物体,在该物体上画细线的延长线,两线的交叉点就是这一物体在这平面上的重心,        其它面同理.适用于实际测量中。


  定理法:(本人自己命名)
    定理1: 由两个图形A,B合并而成的一个图形C,则C的重心必在A的重心与B的重心连接的线段上。(注意,也适用于A B彼此分开,没有公共点的情形)
    定理2: 由两个A,B合并而成的一个图形C,A的重心为点a, B的重心为点b, C的重心为点c, A的面积为Sa, B的面积为Sb,则下面条件成立:
      (1)点c 必在线段 ab 上
      (2) ac * Sa = bc * Sb

  计算几何中:
    三角形的重心: x = (xa+xb+xc)/3,  y = (ya+yb+yc)/3;
    四边形的重心:作一对角线,将它分成两个三角形分别求出重心与面积 (x1,y1) ,s1 ; (x2, y2), s2 则该四边形的重心为: x = (x1*s1+x2*s2)/(s1+s2), y = (y1*s1+y2*s2)/(s1+s2);
    五边形则分为一个三角形与一个四边形……

    任意多边形中直接取任一点(一般为原点)把多边形分为n-2个三角形 分别求重心
      x=∑ si * xi / ∑si
      y=∑ si * yi / ∑si
      si 为每块三角形的有向面积 (就是叉积),叉积求解不懂可看:http://www.cnblogs.com/Duahanlang/archive/2013/05/11/3073434.html  里边有介绍。

附上关键代码:( n 多边形的重心)

 

View Code
 1 // x1~y3 分别为不同三个相邻点的坐标(相邻为了使三角形不重叠)
 2 double x1, y1, x2, y2, x3, y3;     //此处不用数组,只要迭代就可,节省空间
 3 double cx, cy;    //重心坐标
 4 double A;          // 有向面积之和
 5 double vs;        // 各个三角形有向面积
 6 cx = 0, cy = 0, A = 0;
 7 cin >> n;
 8 cin >> x1 >> y1 >> x2 >> y2;
 9 for(i = 2; i < n; ++i) {
10        cin >> x3 >> y3;
11        vs = (x2-x1) * (y3-y1) - (x3-x1) * (y2-y1);     //有向面积
12      A += vs;
13        cx += (x1+x2+x3)*vs, cy += (y1+y2+y3)*vs;
14        x2 = x3, y2 = y3;                                 //此处迭代x2, y2, 固定点x1, y1
15 }
16 cx /= (3.0*A), cy /= (3.0*A);                   // 最后坐标

 

练习: hdoj 1115
  链接:http://acm.hdu.edu.cn/showproblem.php?pid=1115

 

 

转载于:https://www.cnblogs.com/Duahanlang/archive/2013/05/12/3074339.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算任意多边形几何中心重心需要用到多边形的顶点坐标。以下是使用MATLAB计算多边形几何中心重心的方法: 假设多边形顶点坐标为 $P_1(x_1,y_1), P_2(x_2,y_2),...,P_n(x_n,y_n)$。 1. 计算几何中心 几何中心是所有顶点坐标的平均值,即: $$x_c=\frac{1}{n}\sum_{i=1}^{n} x_i$$ $$y_c=\frac{1}{n}\sum_{i=1}^{n} y_i$$ MATLAB代码如下: ```matlab % 输入顶点坐标 x = [x1, x2, ..., xn]; y = [y1, y2, ..., yn]; % 计算几何中心 xc = mean(x); yc = mean(y); ``` 2. 计算重心 重心是所有三角形重心的加权平均值,其中每个三角形的重心是三个顶点坐标的平均值。具体而言,对于第 $i$ 个三角形,其重心坐标为: $$x_i=\frac{1}{3}(x_{i1}+x_{i2}+x_{i3})$$ $$y_i=\frac{1}{3}(y_{i1}+y_{i2}+y_{i3})$$ 其中 $(x_{i1},y_{i1})$、$(x_{i2},y_{i2})$ 和 $(x_{i3},y_{i3})$ 是第 $i$ 个三角形的三个顶点坐标。 重心的坐标为所有三角形重心坐标的加权平均值,其中每个三角形的面积为其三个顶点构成的三角形面积的和,即: $$x_g=\frac{\sum_{i=1}^{n} S_i x_i}{\sum_{i=1}^{n} S_i}$$ $$y_g=\frac{\sum_{i=1}^{n} S_i y_i}{\sum_{i=1}^{n} S_i}$$ 其中 $S_i$ 是第 $i$ 个三角形的面积。 MATLAB代码如下: ```matlab % 输入顶点坐标 x = [x1, x2, ..., xn]; y = [y1, y2, ..., yn]; % 计算三角形面积和重心 S = 0; xg = 0; yg = 0; for i = 1:n-2 for j = i+1:n-1 for k = j+1:n % 计算第 i,j,k 个顶点组成的三角形面积 Si = abs((x(j)-x(i))*(y(k)-y(i))-(x(k)-x(i))*(y(j)-y(i)))/2; % 计算三角形重心坐标 xi = (x(i) + x(j) + x(k))/3; yi = (y(i) + y(j) + y(k))/3; % 更新重心坐标和三角形面积 xg = xg + Si*xi; yg = yg + Si*yi; S = S + Si; end end end % 计算重心坐标 xg = xg/S; yg = yg/S; ``` 注意,如果多边形是凸多边形,则几何中心重心重合。如果多边形是凹多边形,则重心会偏离几何中心

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值