多边形重心求法

三角形的重心公式为三角形重心公式x=(x1+x2+x3)/3,y=(y1+y2+y3)/3。

思路是这样的:先将多边形分解成多个三角形,分别求这些三角形的重心,然后得到一组更少点的集合,递归直到点的个数小于3时,即可得到答案。

如果输入的点的集合是按照顺时针或逆时针顺序的,那么分解三角形就不成问题,就很容易写出代码了。

[csharp]
 
private PointF CalPolygonCenterPoint(List<PointF> list)  
  1. {  
  2.     if (1 == list.Count)  
  3.     {  
  4.         return list[0];  
  5.     }   
  6.     else if (2 == list.Count)  
  7.     {  
  8.         return new PointF((list[0].X + list[0].X) / 2, (list[1].Y + list[1].Y) / 2);  
  9.     }  
  10.     else if (list.Count >= 3)  
  11.     {  
  12.         List<PointF> newList = new List<PointF>();  
  13.         for (int i = 1; i < list.Count - 1;++i )  
  14.         {  
  15.             newList.Add(CalTriCenterPoint(list[0], list[i], list[i + 1]));  
  16.         }  
  17.         return CalPolygonCenterPoint(newList);  
  18.     }   
  19.     else  
  20.     {  
  21.         throw new Exception("点的集合为空!");  
  22.     }  
  23. }  
  24.   
  25. private PointF CalTriCenterPoint(PointF pt1, PointF pt2, PointF pt3)  
  26. {  
  27.     float x = pt1.X + pt2.X + pt3.X;  
  28.     x /= 3;  
  29.     float y = pt1.Y + pt2.Y + pt3.Y;  
  30.     y /= 3;  
  31.     return new PointF(x, y);  
  32. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值