题意
已知圆PQR是三角形ABC的内切圆且与三角形ABC交于点P,Q,R,给出圆的半径,和三个比例(m1:n1,m2:n2,m3:n3),求整个三角形的面积。
思路
1. 设AP = x,那么所有边都可以用 x 来表示,三角形三边a,b,c也可用x表示
2. 设三角形ABC的半周长为p,那么 p = ( a + b + c) / 2,由海伦公式,S(ABC) = sqrt(p * (p - a) * (p - b) * (p - c));
3. 设三条边长为a,b,c,那么三角形ABC等于三个小三角形的面积,S(ABC) = a * r / 2 + b * r / 2 + c * r / 2
= p * r;
4. p * r = sqrt(p * (p - a) * (p - b) * (p - c))
=》 p * r * r = (p - a) * (p - b) * (p - c)
=》 x = r * sqrt( p / ( (p - a) * (p - b) * (p - c) ) )
5. 所以 S (ABC) = r * p
code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
double r, a1, a2, a3, b1, b2, b3;
scanf("%lf%lf%lf%lf%lf%lf%lf", &r, &a1, &b1, &a2, &b2, &a3, &b3);
double a = (a1 + b1) / a1;
double b = b1 / a1 * (a2 + b2) / a2;
double c = b1 * b2 / a1 / a2 * (a3 + b3) / a3;
double p = (a + b + c) / 2;
double ap = r * sqrt(p / ((p - a)*(p - b)*(p - c)));
double s = r * ap * (1 + b1 / a1 + b1 * b2 / a1 / a2);
printf("%.4lf\n", s);
}
}