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分)的主要内容,如果未能解决你的问题,请参考以下文章