2025年多边形重心公式算法

多边形重心公式算法多边形重心公式算法 有需要的朋友可以参考下 网上看了很多 但是有的需要序列逆序 但是 对顶点序列转置后计算的重心坐标还是不正确 话费好长时间找到这个 测试一些可以使用 如果有什么不正确的 希望可以指出来 我也好及时的更正 多边形的重心公式

大家好,我是讯享网,很高兴认识大家。

多边形重心公式算法,有需要的朋友可以参考下。

网上看了很多,但是有的需要序列逆序,但是,对顶点序列转置后计算的重心坐标还是不正确,话费好长时间找到这个,测试一些可以使用,如果有什么不正确的,希望可以指出来,我也好及时的更正。

多边形的重心公式:

 | Xi X(i+1)| area = sum{ | | /2} | Yi Y(i+1)| | Xi X(i+1)| Cx = sum{ | | * (Xi + X(i+1) ) / (6 * area) } | Yi Y(i+1)| | Xi X(i+1)| Cy = sum{ | | * (Yi + Y(i+1) )/ (6 * area) } | Yi Y(i+1)|

讯享网

算法:


讯享网

讯享网#include <iostream> using std::cin; using std::cout; using std::endl; // 定义点坐标 struct Point { double x; double y; }; struct test { int x; int y; }; Point centerPoint(Point* array, const int point_size); int main(int argc, char* argv[]) { const int point_size = 4; // 顶点个数 Point array[point_size] = { 
  
    
  {1,1}, {1,2}, {2,2}, {2,1}}; //顶点数组 Point center = centerPoint(array,point_size); cout<<"输出图多边形重心:"; cout<<"("<<center.x <<", "<<center.y<<")"<<endl; return 0; } Point centerPoint(Point* array,const int point_size) { double temp; double area=0; double cx = 0, cy = 0; for (int i = 0;i<point_size-1;i++) { temp = array[i].x * array[i+1].y - array[i].y *array[i+1].x; area+= temp; cx+= temp * (array[i].x+array[i+1].x); cy+= temp * (array[i].y+array[i+1].y); } temp = array[point_size-1].x * array[0].y - array[point_size-1].y *array[0].x; area+= temp; cx+= temp * (array[point_size-1].x+array[0].x); cy+= temp * (array[point_size-1].y+array[0].y); area = area/2; cx = cx/(6*area); cy = cy/(6*area); Point C = {cx,cy}; return C; }

2、

X = (x1*M1+x2*M2+...+xn*Mn) /(M1+M2+....+Mn)

n Y = (y1*M1+y2*M2+...+yn*Mn) /(M1+M2+....+Mn)
小讯
上一篇 2025-02-21 15:03
下一篇 2025-02-22 10:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/121138.html