UVA - 11524 InCircle

 

題意

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