题解:UVA11437 Triangle Fun
现在开始上数学课
这是一道初中难度的平面几何题,关键就在于求出
前置知识:行列式法求三角形面积,即已知三角形
具体证法可参考这篇文章。如果搞不懂行列式法的,用海伦公式或直接作垂/建系也行。
由于本蒟蒻懒得去用几何方法证明,于是决定采用建系暴算的方式证明
证法如下:
1. 建立坐标系
为了简化计算(其实简化了也一点都不简单),设:
2. 确定 D 、E 、F 的坐标
-
$$D = B + \frac{1}{3}(C - B) = \left( b + \frac{c_1 - b}{3}, 0 + \frac{c_2}{3} \right) = \left( \frac{2b + c_1}{3}, \frac{c_2}{3} \right)$$ -
同理
E = A + \frac{2}{3}(C - A) = \left( \frac{2c_1}{3}, \frac{2c_2}{3} \right) F = A + \frac{1}{3}(B - A) = \left( \frac{b}{3}, 0 \right)
3. 求直线 AD 、BE 、CF 的方程
-
直线
AD :- 斜率:
k_{AD} = \frac{\frac{c_2}{3} - 0}{\frac{2b + c_1}{3} - 0} = \frac{c_2}{2b + c_1} - 方程:
y_{AD} = \frac{c_2}{2b + c_1} x
- 斜率:
-
同理
y_{BE} = \frac{2c_2}{2c_1 - 3b}(x - b) y_{CF} = \frac{3c_2}{3c_1 - b}(x - c_1) + c_2
4. 求交点 P 、Q 、R
-
交点
P (AD \cap BE ):-
联立
AD 和BE 的方程:\frac{c_2}{2b + c_1} x = \frac{2c_2}{2c_1 - 3b}(x - b) 消去
c_2 (c_2 \neq 0 ):\frac{x}{2b + c_1} = \frac{2(x - b)}{2c_1 - 3b} 交叉相乘:
x(2c_1 - 3b) = 2(x - b)(2b + c_1) 展开并整理:
2c_1 x - 3b x = 2(2b x + c_1 x - 2b^2 - b c_1) 2c_1 x - 3b x = 4b x + 2c_1 x - 4b^2 - 2b c_1 移项:
-3b x - 4b x = -4b^2 - 2b c_1 -7b x = -2b(2b + c_1) 解得:
x = \frac{2(2b + c_1)}{7}, \quad y = \frac{c_2}{2b + c_1} \cdot \frac{2(2b + c_1)}{7} = \frac{2c_2}{7} 因此:
P\left( \frac{2(2b + c_1)}{7}, \frac{2c_2}{7} \right)
-
-
同理可得
Q\left( \frac{4c_1 + b}{7}, \frac{4c_2}{7} \right) R\left( \frac{2b + c_1}{7}, \frac{c_2}{7} \right)
5. 计算三角形 PQR 的面积
-
已知:
P\left( \frac{4b + 2c_1}{7}, \frac{2c_2}{7} \right), \quad Q\left( \frac{4c_1 + b}{7}, \frac{4c_2}{7} \right), \quad R\left( \frac{2b + c_1}{7}, \frac{c_2}{7} \right) 利用行列式公式计算面积:
S_{\triangle PQR} = \frac{1}{2} \left| x_P(y_Q - y_R) + x_Q(y_R - y_P) + x_R(y_P - y_Q) \right| 计算各项:
y_Q - y_R = \frac{4c_2}{7} - \frac{c_2}{7} = \frac{3c_2}{7} y_R - y_P = \frac{c_2}{7} - \frac{2c_2}{7} = -\frac{c_2}{7} y_P - y_Q = \frac{2c_2}{7} - \frac{4c_2}{7} = -\frac{2c_2}{7} 代入:
S_{\triangle PQR} = \frac{1}{2} \left| \frac{4b + 2c_1}{7} \cdot \frac{3c_2}{7} + \frac{4c_1 + b}{7} \cdot \left(-\frac{c_2}{7}\right) + \frac{2b + c_1}{7} \cdot \left(-\frac{2c_2}{7}\right) \right| = \frac{c_2}{98} \left| 7b + 0 \right| = \frac{c_2}{98} \cdot 7b = \frac{b c_2}{14}
6. 计算三角形 ABC 的面积
7. 求面积比
由此可得 S_{\triangle PQR} = \frac{1}{7} S_{\triangle ABC} 。
于是我们只要求出
代码
#include <bits/stdc++.h>
using namespace std;
double cal(double x1, double y1, double x2, double y2, double x3, double y3) // 使用行列式计算三角形面积
{
return 0.5 * abs((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1));
}
int main()
{
int T;
cin >> T;
while (T--)
{
double a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
double s = cal(a, b, c, d, e, f) / 7;
printf("%.0lf\n", s); // 记得保留整数
}
return 0;
}