两道几何题的求解

来源:互联网 发布:有个腿长的女朋友知乎 编辑:程序博客网 时间:2024/05/01 02:45

题一:求二维平面上,两个圆是否有公切弦,如果有,求出公切线。

在朋友的博客上看到这个问题,别人推导了很优美的公式出来,非常棒,不过推导公式是“一步登天”的思维方式,如果是在比赛中或者正工作中,可能要非常短的时间就要做出来,那么我们就要将步骤分解,尽量能得到有用的参数。2个圆有五种分布状态,简单分析一下:

  1. 分离,4条公切线,2外,2内
  2. 外相切,3跳公切线,2外,1内
  3. 相交,2条公切线,2外
  4. 内相切,1条公切线,1外
  5. 包含,没有公切线

这三种情况很好区分,比较一下圆的半径和与圆心之间的距离就可以了。假定两个圆是(x1, y1), R1和(x2, y2), R2。这里这描述一下外向切和内向切,

  • 外向切,Distance((x1, y1), (x2, y2)) == R1 + R2
  • 内相切,Distance((x1, y1), (x2, y2)) == |R1 – R2|

确定状态后,求可以挨个去求了,下面只分析相离的外公切线的情况,其他情况可以套用分析方法。

Screenshot from 2015-08-26 22:13:55

虚实相交的线是我做的辅助线,可以看出有公切线和辅助线组成了2个直角三角形,且相似,相似!那么
设三角形顶点的位置为(xt, yt)(假设向左衍生):

x1 – xt / x2 – xt = r1 / r2 ==> xt = (r2x1 – x2r1) / (r2 – r1)

同理可得yt,这样就得到了切线上的一个点,斜率通过长度也可以迅速求出,这样就一步解决了问题。其他的情况用相似三角形手段都能求出。

回顾流程,一共三步:

  1. 判断圆的分布
  2. 利用相似三角形,求出公切线上一个点
  3. 求出斜率

思路清晰,公式少,不易出错。相对与推公式的方法,简单、有效。

题二:给一个三角形,问三角形会不会与圆相交。

题目描述非常简单,难度也不大,是51nod的上一道2等级的题,问想不相交,其实就是问每一条线与圆是不是都没有交点。问题便简化成线段与圆的相交问题,当然很多人用几何的方法去推导公式,什么点到直线的距离,求垂线,然后求交点,再求交点是不是在这个线段上等等。。。

这里我还是想个懒,用工程师的思维去考虑问题。如何找到线段上一个点,这个点到给定点距离最近,我们可以用二分逼近的手段去做,请看下面的图例,H是最终确定的位置,设左右两边点是P1, P2,如果P2到外面点的距离更远一下,我们可以用P1和P2的中点来代替P2,并且代替过后垂线交点的位置一定还在P1,P2中间,所以可以这样一直二分下去,知道直到找到垂线交点(取一个误差范围,小于误差则结束)。
这样做便避免了复杂的求公式的过程,简化了问题的求解难度。

Screenshot from 2015-08-26 22:14:08

总结一下,计算机就是用来处理简单而大量的计算的,而人是用来想出流程的,需要权衡两者的复杂程度,不能为了节省计算机资源而大量耗费人的脑力,所以,如果枚举行的通,就不要用更高深的东西,毕竟,人生短暂,岂能让韶华易逝!

0 0
原创粉丝点击