【算法:数学】计算几何-多边形的重心

本文介绍计算多边形重心的两种方法:累加和法与三角形分割法。累加和法直接利用离散数据点坐标计算,但精度有限。三角形分割法则通过将多边形分解为多个三角形,利用三角形重心和面积公式进行精确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

转载:计算几何-多边形的重心

1. 1 累加和求重心
设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其
多边形重心G( . x1, . y1) 为:

  这是求多边形最简单直观的方法。可以直接利用离散数
据点的x, y坐标就能求图形重心。但是缺陷在于没有对离散
数据点所围图形做任何处理和分析,精度不够。

1. 2 算法一:在讲该算法时,先要明白下面几个定理。
定理1 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。它的重心坐标为:

  xg = (x1+x2+x3) / 3 ;                       yg = (y1+y2+y3) / 3 ;

定理2 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。该三角形的面积为:

  S =  ( (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) ) / 2 ;

  △A1A2A3 边界构成逆时针回路时取+ , 顺时针时取 -

  另外在求解的过程中,不需要考虑点的输入顺序是顺时针还是逆时针,相除后就抵消了。

  原理:将多边形划分成n个小区域, 每个小区域面积为σi ,重心为Gi ( . xi , . yi ) ,利用求平面薄板重心公式把积分变
  成累加和:

                         

    由前面所提出的原理和数学定理可以得出求离散数据点所围多边形的一般重心公式:以Ai ( xi , yi ) ( i = 1, 2, ., n) 为顶点的任意N边形A1A2 .An ,将它划    分成N - 2个三角形(如图1) 。每个三角形的重心为Gi ( . xi , . yi ) ,面积为σi。那么多边形的重心坐标G( .x2, .y2) 为:

 

              

 图1  多边形分解

 

   例题:HDU 1115 Lifting the Stone

  代码:如下。

 #includestdio.h #includemath.h #includestdlib.h struct centre
  double   cas , n ;
 double Area( centre p0 , centre p1 , centre p2 )
  double  p2.y;
 return ;  // 另外在求解的过程中,不需要考虑点的输入顺序是顺时针还是逆时针,相除后就抵消了。
   main ()
      centre p0 , p1 , p2 ;
 double sum_x , sum_y , sum_area , area;
     scanf ( cas ) ;
 while            sum_x  sum_y  sum_area            scanf (            scanf ( %lf%lfp0.x , p0.y ) ;
           scanf ( %lf%lfp1.x , p1.y ) ;
                 scanf ( %lf%lfp2.x , p2.y ) ;
  Area(p0,p1,p2) ;
               sum_area  area ;
               sum_x  (p0.x  p2.x)  area ;
               sum_y  (p0.y  p2.y)  area ;
             printf ( %.2lf %.2lf\n , sum_x  sum_area  , sum_y  sum_area   return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值