
本文共 3145 字,大约阅读时间需要 10 分钟。
计算几何(三角形内切圆 + 海伦公式) - InCircle - UVA 11524
题意:
对 于 △ A B C , 对于\triangle ABC, 对于△ABC,
假 设 其 内 切 圆 与 其 相 切 于 P 、 Q 、 R 三 点 , 假设其内切圆与其相切于P、Q、R三点, 假设其内切圆与其相切于P、Q、R三点,
给 出 比 例 : m 1 : n 1 , m 2 : n 2 , m 3 : n 3 , 以 及 内 切 圆 的 半 径 , 给出比例:m_1:n_1,m_2:n_2,m_3:n_3,以及内切圆的半径, 给出比例:m1:n1,m2:n2,m3:n3,以及内切圆的半径,
求 出 △ A B C 的 面 积 。 求出\triangle ABC的面积。 求出△ABC的面积。
输入:
T 组 测 试 数 据 , T组测试数据, T组测试数据,
每 组 首 行 包 括 一 个 浮 点 数 R , 表 示 内 切 圆 的 半 径 。 每组首行包括一个浮点数R,表示内切圆的半径。 每组首行包括一个浮点数R,表示内切圆的半径。
接 着 三 行 , 每 行 两 个 浮 点 数 , m i 和 n i 接着三行,每行两个浮点数,m_i和n_i 接着三行,每行两个浮点数,mi和ni
输出:
一 个 浮 点 数 , 表 示 S △ A B C , 小 数 点 后 保 留 4 位 数 字 。 一个浮点数,表示S_{\triangle ABC},小数点后保留4位数字。 一个浮点数,表示S△ABC,小数点后保留4位数字。
Sample Input
2140.950053649715.3010457320 550.3704847907464.9681681852 65.973737823055.0132446384 10.7791711946208.2835101182145.7725891419 8.82641764527.6610997600 436.1911036207483.6031801012 140.2797089713
Sample Output
400156.4075908824.1322
数据范围:
0 < T < 50001 , 1 < R < 5000 , 1 < m 1 , n 1 , m 2 , n 2 , m 3 , n 3 < 50000 0 < T < 50001,1 < R < 5000,1 < m_1, n_1, m_2, n_2, m_3, n_3 < 50000 0<T<50001,1<R<5000,1<m1,n1,m2,n2,m3,n3<50000
分析:
根 据 三 角 形 内 切 圆 的 性 质 , 有 : A P = A R , B P = B Q , C Q = C R 根据三角形内切圆的性质,有:AP=AR,BP=BQ,CQ=CR 根据三角形内切圆的性质,有:AP=AR,BP=BQ,CQ=CR
设 A P = x = A R 设AP=x=AR 设AP=x=AR
则 : B P = n 1 m 1 x = B Q , C R = m 3 n 3 x = C Q 则:BP=\frac{n_1}{m_1}x=BQ,CR=\frac{m_3}{n_3}x=CQ 则:BP=m1n1x=BQ,CR=n3m3x=CQ
A B = c = ( 1 + n 1 m 1 ) x , A C = b = ( 1 + m 3 n 3 ) x , B C = a = ( n 1 m 1 + m 3 n 3 ) x = b + c − 2 x \qquad AB=c=(1+\frac{n_1}{m_1})x,AC=b=(1+\frac{m_3}{n_3})x,BC=a=(\frac{n_1}{m_1}+\frac{m_3}{n_3})x=b+c-2x AB=c=(1+m1n1)x,AC=b=(1+n3m3)x,BC=a=(m1n1+n3m3)x=b+c−2x
一 个 未 知 数 , 可 列 一 个 方 程 来 解 出 , 一个未知数,可列一个方程来解出, 一个未知数,可列一个方程来解出,
我 们 知 道 三 条 边 a , b , c , 以 及 内 切 圆 的 半 径 R , 容 易 想 到 通 过 三 角 形 面 积 来 建 立 等 量 关 系 , 我们知道三条边a,b,c,以及内切圆的半径R,容易想到通过三角形面积来建立等量关系, 我们知道三条边a,b,c,以及内切圆的半径R,容易想到通过三角形面积来建立等量关系,
由 海 伦 公 式 : 由海伦公式: 由海伦公式:
S △ A B C = p ( p − a ) ( p − b ) ( p − c ) , 其 中 p = a + b + c 2 S_{\triangle{ABC}}=\sqrt{p(p-a)(p-b)(p-c)},其中p=\frac{a+b+c}{2} S△ABC=p(p−a)(p−b)(p−c),其中p=2a+b+c
又 : 又: 又:
S △ A B C = ( a + b + c ) R 2 = p R S_{\triangle{ABC}}=\frac{(a+b+c)R}{2}=pR S△ABC=2(a+b+c)R=pR
联 立 得 : 联立得: 联立得:
( p − a ) ( p − b ) ( p − c ) = p R 2 (p-a)(p-b)(p-c)=pR^2 (p−a)(p−b)(p−c)=pR2
而 : 而: 而:
p = ( a + b + c ) 2 = b + c − 1 = ( 1 + n 1 m 1 + m 3 n 3 ) x p=\frac{(a+b+c)}{2}=b+c-1=(1+\frac{n_1}{m_1}+\frac{m_3}{n_3})x p=2(a+b+c)=b+c−1=(1+m1n1+n3m3)x
带 入 解 得 : 带入解得: 带入解得:
x = ( 1 + n 1 m 1 + m 3 n 3 ) R 2 n 1 m 3 m 1 n 3 x=\sqrt{\frac{(1+\frac{n_1}{m_1}+\frac{m_3}{n_3})R^2}{\frac{n_1m_3}{m_1n_3}}} x=m1n3n1m3(1+m1n1+n3m3)R2
带 入 能 够 解 得 三 角 形 面 积 。 带入能够解得三角形面积。 带入能够解得三角形面积。
代码:
#include<cstring>#include<iostream>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;int main(){ int T; double R; double n[4],m[4]; scanf("%d",&T); while(T--) { scanf("%lf",&R); for(int i=1;i<=3;i++) scanf("%lf%lf",&m[i],&n[i]); double x=sqrt((1+n[1]/m[1]+m[3]/n[3])*R*R/(n[1]*m[3]/m[1]/n[3])); double S=(1+n[1]/m[1]+m[3]/n[3])*x*R; printf("%.4lf\n",S); } return 0;}
发表评论
最新留言
关于作者
