题目:
思路:
经过重心的直线可以把长方形分成面积相等的两部分。因为是长方形所以给出两个相对的点就可以求重心。
推导过程
需要注意的点:
因为double是拿二进制存的,所以进行计算和存储的适合会有微小的偏差,以及if(a)是去判断是不是每一位都为0
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=111111;
double a1,b1,a2,b2,a,b,c,ta1,tb1,ta2,tb2;
int main()
{
cin>>a1>>b1>>a2>>b2;
ta1=(a1+a2)/2;
tb1=(b1+b2)/2;
cin>>a1>>b1>>a2>>b2;
ta2=(a1+a2)/2;
tb2=(b1+b2)/2;
a=tb1-tb2;
b=ta2-ta1;
c=ta1*tb2-ta2*tb1;
if(abs(a)>1e-12)
{
b/=a;
c/=a;
a/=a;
}
else
{
c/=b;
b/=b;
}
printf("%lf\n%lf\n%lf\n",a,b,c);
return 0;
}