#P3808. Malfatti Circles
Malfatti Circles
题目描述: 两百多年来,许多数学家都在研究这样一个几何构型:在一个三角形内部放置三个圆,使得每个圆都与另外两个圆相切,并且与三角形的两条边相切。对于任意三角形,这种圆的存在性和唯一性很容易证明。人们已经发现了许多从任意给定三角形出发,通过数值计算或几何构造这些圆的方法。如今,这样的圆被称为马尔法蒂圆。
图 7 展示了一个示例。顶点位于 (20, 80)、(-40, -20) 和 (120, -20) 的三角形的马尔法蒂圆近似为:
圆心 (24.281677, 45.219486),半径 21.565935 的圆;
圆心 (3.110950, 4.409005),半径 24.409005 的圆;
圆心 (54.556724, 7.107493),半径 27.107493 的圆。
图 8 展示了另一个示例。顶点位于 (20, -20)、(120, -20) 和 (-40, 80) 的三角形的马尔法蒂圆近似为:
圆心 (25.629089, -10.057956),半径 9.942044 的圆;
圆心 (53.225883, -0.849435),半径 19.150565 的圆;
圆心 (19.701191, 19.203466),半径 19.913790 的圆。
你的任务是编写一个程序,计算给定三角形的马尔法蒂圆半径。
输入格式:
- 多组数据,每组数据为一行六个整数x1 y1 x2 y2 x3 y3,表示三角形三个顶点的坐标
- 顶点按逆时针顺序给出
- 坐标范围在(-1000,1000)之间
- 所有Malfatti圆的半径不小于0.1
- 以六个0表示输入结束
输出格式:
- 每组数据输出三个小数r1 r2 r3,分别表示距离顶点(x1,y1)、(x2,y2)、(x3,y3)最近的Malfatti圆的半径
- 误差不超过0.0001
示例输入输出:
输入:
20 80 -40 -20 120 -20
20 -20 120 -20 -40 80
0 0 1 0 0 1
0 0 999 1 -999 1
0 0 0 0 0 0
输出:
21.565935 24.409005 27.107493
9.942044 19.150565 19.913790
0.148847 0.207107 0.207107
0.125125 0.499750 0.499750