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