算是做的第一道计算几何题吧,虽然是道很容易的...
主要是把长方形的重心放在正方形中
设长方形长为a 宽为b
正方形变长为l
那么长方形的方法一定是把长方形向正方形的角上放
这样可以保证长方形的重心在占用面积尽可能小的前提下放入正方形
所以就要分3种情况了
1:长方形放置好时长方形的长边未过正方形的中心,此时占用的面积为一个等腰直角三角形面积
2:长方形放置好时长方形的长边过了正方形的中心但未过正方形的另一个角,此时面积为正方形面积减去一个等腰直角三角形的面积
3:长方形放置好时长方形的长边过了正方形的另一个角,此时面积为正方形的面积
代码如下:
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define ll long long
using namespace std;
int main(void) {
int T;
double l, a, b;
cin >> T;
while(T--) {
scanf("%lf%lf%lf", &l, &a, &b);
if(a > b) {
double temp = a;
a = b;
b = temp;
}
double gen = sqrt(2.0);
if(a>gen*l && a<2*gen*l) {
printf("%.4lf\n", l*l-(gen*l-a/2.0)*(gen*l-a/2.0));
}
else if(a > gen*l) {
printf("%.4lf\n", l*l);
}
else printf("%.4lf\n", a*a/4.0);
}
}