|
边长为 13,14,15 的三角形内有四个大小相等、彼此相切的圆,求圆的半径
[这个贴子最后由天山草在 2011/11/27 07:15pm 第 4 次编辑]
   本人的方法是先假定外面的三个圆一样大,圆半径是 R1,任意给它一个较小的值,例如 R1 = 1,然后中间那个圆按相切条件,计算其半径 R2。结果当然是 R2 大于 R1,但是这不要紧,让 R1 逐渐增大,则 R2 将逐渐减小,直到二者之差接近相等为止。计算机最适合玩这种“游戏”了。
  程序如下:
R1 = 1
888:
 AB = 14: BC = 15: CA = 13
 a = BC: b = CA: c = AB
 a1 = (b ^ 2 + c ^ 2 - a ^ 2) / 2 / b / c  ';a1 = Cos(A)
 b1 = (a ^ 2 + c ^ 2 - b ^ 2) / 2 / a / c  ';b1 = Cos(B)
 c1 = (b ^ 2 + a ^ 2 - c ^ 2) / 2 / b / a  ';c1 = Cos(C)
 aa1 = Sqr(1 - a1 ^ 2)
 bb1 = Sqr(1 - b1 ^ 2)
 cc1 = Sqr(1 - c1 ^ 2)
 JA = Atn(aa1 / a1)
 JB = Atn(bb1 / b1)
 JC = Atn(cc1 / c1) ';求出三个角度。到此为止,不用“实质性地”动脑子。
 
 A1B1 = AB - R1 * 1 / Tan(JA / 2) - R1 * 1 / Tan(JB / 2)
     ';上面 A1B1 就是陆教授图中的 A';B';
 
 R = A1B1 / 2 / Sin(JC)    ';R 就是中间那个圆的外接圆半径
 R2 = R - R1
 If Abs(R1 - R2) > 0.0000000000001 Then
   RR = (R1 + R2) / 2
   R1 = (R1 + RR) / 2   ';加权迭代
   GoTo 888
   Else
   GoTo 999
 End If
999:
  rint R1, R2, R1 - R2   ';打印出结果和误差
程序运行结果是:
    R1                      R2                     R1-R2
2.01550387596899       2.01550387596899        7.105427357601E-15
跟陆教授的答案一致。
   这种方法是“傻瓜”计算法,基本上不用动脑子去找那些复杂的数学关系。其缺点是分析得不如陆教授那样深刻。此法只能给出具体数值,而不能给出陆教授那样的解析表达式。另外就是,这方法不适合当今的教育制度,因为考场上不允许带计算机,也不允许编程做题。
   噢,想起一件事,现在中学、大学的数学考场上,是否允许考生带计算器?是计算器,不是计算机。小学生估计是不允许带的,这当然是对的。
1960 年代时,大学生考试允许带“计算尺”,那时候还没有发明计算器。至于“计算机”,只有学校的试验室里才有,不过那只是个手摇的东西,只能算算乘法和除法。谁摇得快,谁就算得快。
|
|