欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ACM-数学知识-计算几何-求多边形的重心坐标

程序员文章站 2022-04-01 14:48:19
...

#求多边形的重心的坐标
下面代码的输入是:
第一行:N个顶点
第2~N+1行:第i个顶点的x坐标 第i个顶点的y坐标
==输出:==得到的重心的x坐标和y坐标

#include <iostream>
#include <cstdio>
using namespace std;
int T, N, x[3], y[3];
double sumx, sumy, sumarea;
int main()  {
    scanf("%d", &T);
    while(T--){
        sumx = sumy = sumarea = 0.0;
        scanf("%d", &N);
        scanf("%d %d %d %d", x, y, x+1, y+1);
        N -= 2;
        while(N--){
            scanf("%d %d", x+2, y+2);
            //求新添加的三角形的面积
            double s = ((x[1] - x[0]) * (y[2] - y[0]) - (x[2] - x[0]) * (y[1] - y[0])) / 2.0;
            //求∑x[i]*s[i]和∑y[i]*s[i]
            sumx += ((x[0] + x[1] + x[2]) * s);
            sumy += ((y[0] + y[1] + y[2]) * s);
            //求总面积
            sumarea += s;
 
            x[1] = x[2];
            y[1] = y[2];
        }
        printf("%.2lf %.2lf\n", sumx / sumarea / 3, sumy / sumarea / 3);
    }
    return 0;

原文链接:https://blog.csdn.net/qq_26891045/article/details/51464782