CheckIO - Three Points Circle
Mar 16, 2022 python, CHECKIOhttp://www.checkio.org/mission/task/info/three-points-circle/python-27/
问题简化下来就是:给出三个点,求这三个点所在圆的方程
说实话,这个问题看起来很简单的,全是初中数学知识。,求园的方程无非就是两点:
- 圆心座标
- 半径
1. 两条线段的表示方式
无非就是两种方式y=ax+c或者ax+by+c=0两种,但是考虑到线段所在的直线可能平行于X轴或者Y轴,第一种方式相对来说就有一些局限了——因为无法表示平行于Y轴的线段。当然除此之外,都是可以的。所以我除此之外都将b固定为-1,平行的时候设置为0。
在确定了表示方法后,就是需要求出a和c两个常量,对应的方法很简单——先求斜率a,在求c
2. 有了两条线段所在直线的方程后,求中垂线方程
线段的中间点很简单,不需要任何技巧。而且对于已知斜率为k的直线,垂线斜率为-1/k。
当然还是需要把平行于X轴和Y轴这两种情况单独拿出来,-1/k是不行的。
3. 两条中垂线的交点与半径
对于已知的两条直线,交点座标可以用百科上的方法来得到。在有了圆心座标后,半径也就很方便的可以得到了。
4. 如何表示成要求的形式
以前我一直都使用这样的方式格式化字符串:
'x-%d' % 4.0这样的方式当浮点数后面全是0的时候,无法表示成整形的样子。也就是说,4.1要不只能4.1,要不只能4;4.0要不只能4.0,要不只能4
而题目所需要的表示方式是,当小数点后面全是0的时候,表示成整数的形式,其他时候表示成两位小数。难道我还需要手动判断吗?
恕我孤陋寡闻,在google以后才知道还有另外的方式表示
'x-{:g}'.format(4.0)这种方式从文档中看更加灵活,而且有一个超方便的g参数,可以实现我们的要求。实在爽翻了!
下面是代码