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

Angle and Squares UVA - 1643

程序员文章站 2022-03-30 08:25:52
...

几何分析的一道题目,如果在这个角度内部放置的正方形能够达到对角线在同一条直线上,那么就可以保证得到的阴影部分的面积最大,以此求出正方形和两条直线的两个交点(这两个交点的横坐标的之差以及纵坐标之差均为正方形的边长之和,同时也直到这两个点所在的直线的方程,那么就可以解出两个交点的坐标)。所以阴影部分的面积也就是两个交点和原点所围成的三角形的面积减去正方形面积之和的一半(可以画图得到),具体实现见如下代码:

#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
#include<functional>
using namespace std;

int main(){
	int N;
	double xa, ya, ka;
	double xb, yb, kb;
	while (cin >> N){
		if (N == 0) break;
		cin >> xa >> ya >> xb >> yb;
		double L = 0;
		double area = 0;
		for (int i = 0; i < N; i++){
			double t;
			cin >> t;
			L += t;
			area += (t*t) / 2.0;
		}
		ka = ya / xa, kb = yb / xb;
		if (ka < kb){
			swap(xa, xb), swap(ya, yb), swap(ka, kb);
		}
		double x1 = (kb + 1)*L / (ka - kb);
		double x2 = (ka + 1)*L / (ka - kb);
		double y1 = ka*x1;
		double y2 = kb*x2;
		double total = (x2*y1 - x1*y2)/2;
		cout << fixed << setprecision(3) << (total - area) << endl;
	}
	return 0;
}