三角形的重心公式为三角形重心公式x=(x1+x2+x3)/3,y=(y1+y2+y3)/3。
思路是这样的:先将多边形分解成多个三角形,分别求这些三角形的重心,然后得到一组更少点的集合,递归直到点的个数小于3时,即可得到答案。
如果输入的点的集合是按照顺时针或逆时针顺序的,那么分解三角形就不成问题,就很容易写出代码了。
- {
- if (1 == list.Count)
- {
- return list[0];
- }
- else if (2 == list.Count)
- {
- return new PointF((list[0].X + list[0].X) / 2, (list[1].Y + list[1].Y) / 2);
- }
- else if (list.Count >= 3)
- {
- List<PointF> newList = new List<PointF>();
- for (int i = 1; i < list.Count - 1;++i )
- {
- newList.Add(CalTriCenterPoint(list[0], list[i], list[i + 1]));
- }
- return CalPolygonCenterPoint(newList);
- }
- else
- {
- throw new Exception("点的集合为空!");
- }
- }
- private PointF CalTriCenterPoint(PointF pt1, PointF pt2, PointF pt3)
- {
- float x = pt1.X + pt2.X + pt3.X;
- x /= 3;
- float y = pt1.Y + pt2.Y + pt3.Y;
- y /= 3;
- return new PointF(x, y);
- }