7-8 对称图形的面积 (25分)

Posted luoyoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-8 对称图形的面积 (25分)相关的知识,希望对你有一定的参考价值。

二维平面坐标系上有一些散乱点,首先需要根据点的y坐标值将散乱点排序,之后将点连接成一条开放的多边形曲线。 给定一条和Y轴平行的旋转轴x=x?0??,此时将多边形曲线按旋转轴x = x?0??做镜像,并在最底端和最高端的原始点和镜像点之间连接两条线段,从而构成一个封闭的对称图形,请你计算该图形的面积。对称轴的x?0??坐标值要么大于所有散乱点的x坐标值,要么小于所有点的x坐标,因此该对称图形不存在自交现象。题目保证所有散乱点的y坐标值都不相同。

输入格式:

第一行给出平行于y轴的旋转轴的x坐标x?0??,第二行给出正整数n (2≤ n ≤10?4??),表示散乱点个数,随后n行给出散乱点的x和y坐标。

输出格式:

输出该对称图形的面积,保留2位小数。

输入样例:

例如输入1:

3.0
2
-1.5 1.5
1.5 -1.5

输出:

18.00

例如输入2:

-10.25
5
-1.5 1.5
-1.5 4.5
1.5 -1.5
10.5 -11.5
21.52 20.5

输出:

1087.32
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define N 10000
struct vi
{
    double x;
    double y;
};
bool cmp(vi a, vi b)
{
    return a.y > b.y;
}
int main()
{
    double x0, x, y, s = 0, flag=-1;
    int n;
    cin >> x0 >> n;
    vi v[N];
    for (int i = 0; i < n; i++)
    {
        cin >> x >> y;
        v[i].x = x;
        v[i].y = y;
        if (x > x0)
            flag = 1;
    }
    sort(v, v + n, cmp);
    for (int i = 0; i < n-1; i++)
    {
        if (flag==-1)
             s+= ((x0 - v[i].x) + (x0 - v[i+1].x))*(v[i].y - v[i+1].y) / 2;
        else
             s += ((v[i].x -x0) + (v[i+1].x -x0))*(v[i].y - v[i+1].y) / 2;
    }
    s = 2 * s;
    printf("%.02f", s);
}

以上是关于7-8 对称图形的面积 (25分)的主要内容,如果未能解决你的问题,请参考以下文章

面向对象用虚函数计算各种图形的面积 (10 分)

L2-008 最长对称子串 (25分)

L2-008 最长对称子串 (25 分) (模拟)

7-8(树) 修理牧场(25 分)

c语言怎么输入半径求圆面积和周长?

520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)