• NYOJ3——多边形重心问题


    多边形重心问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:5 
    描述:在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一           个多边形或一条线段或一个多边形和一个线段的连接后的图形;如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标       的和;
    输入:第一行有一个整数0<n<11,表示有n组数据;
    每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点;
    输出:输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位;
    样例输入
    3
    3
    0 1
    0 2
    0 3
    3
    1 1
    0 0
    0 1
    4
    1 1
    0 0
    0 0.5
    0 1
    样例输出
    0.000 0.000
    0.500 1.000
    0.500 1.000

    思路来源:http://blog.csdn.net/kay_zhyu/article/details/8805631

    代码:

    #include<stdio.h>
    #include<math.h>
    const int N = 10001;
    
    struct POINT
    {
        double x;
        double y;
    };
    
    POINT point[N];
    
    int main()
    {
        int n,num,i;
        double temp,s,x,y;
        scanf("%d", &num);
        while(num--)
        {
            scanf("%d",&n);
            for(i = 0; i < n; ++i)
                scanf("%lf %lf",&point[i].x, &point[i].y);
    
            point[n].x = point[0].x;//记下第一个点,形成循环
            point[n].y = point[0].y;
    
            s = 0.0;
            x = 0.0;
            y = 0.0;
    
            for(i = 0; i < n; i++)
            {
                temp = (point[i].x * point[i + 1].y - point[i + 1].x * point[i].y) / 2.0;//求出小三角形的面积,这里是以原点为另外的基准点
                s += temp;
                x += temp * (point[i].x + point[i + 1].x) / 3.0;
                y += temp * (point[i].y + point[i + 1].y) / 3.0;
    
            }
    
            //叉乘有方向,取绝对值
            if(fabs(s) < 10e-4)
                printf("0.000 0.000
    ");
            else
                printf("%.3lf %.3lf
    ", fabs(s), fabs(x + y) / fabs(s));
    
        }
    
        return 0;
    
    }
  • 相关阅读:
    Codeforces Round #563 (Div. 2)B;Ehab Is an Odd Person
    Codeforces Round #563 (Div. 2)C. Ehab and a Special Coloring Problem
    Codeforces Round #567 (Div. 2) A.Chunga-Changa
    Codeforces Round #569 (Div. 2) B. Nick and Array
    Codeforces Round #570 (Div. 3) B. Equalize Prices
    2019年银联极客挑战赛第一题
    js点击保存图片
    vant地区三级联动
    input 输入金额正则判断
    git 实用命令
  • 原文地址:https://www.cnblogs.com/bxyan/p/4633226.html
Copyright © 2020-2023  润新知