题意

已知圆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);
	}
}