高级编程通关练习题 #1:匿名函数计算两圆相交面积

给定两个有相同半径R的圆中心点的位置A、B,计算这两个圆相交部分的面积。Python编码要求:使用匿名函数单行完成全部计算,总代码的字符长度不能超过128位。 譬如上面两个圆的半径都是 5,圆心的位置分别是(0,0)和(6,0),相交的绿色部分面积为22.365。计算绿色面积的思路:用圆心到两圆相交两点的扇形面积减去圆心到两圆相交两点三角形面积。如下图所示,黄色加绿色的扇形面积减去黄色三角形面积,就是两圆相交面积的1/2。 首先计算两圆中心之间的距离和相交点位置坐标的公式如下: 上面的 d 为两圆中心点之间的距离,x,y 为两圆相交点的平面坐标位置,算式中的 Ax、Ay为圆A的中心坐标,Bx、By为圆B的中心坐标,Ar为圆A的半径,Br为圆B的半径。然后我们需要计算两个扇形面积,以及两个三角形的面积: 注意上面的两个圆的半径 Ar 和Br 在这里是相等的,所以两个扇形面积 areas,1 和 areas,2是一样的,两个三角形面积 areat,1 和 areat,2 也是相等的。 上面的算式转换后就可以得到两圆相交面积(上图绿色部分)的计算公式如下: 根据上面的计算公式,在两圆半径相等,也就是 Ar 等于 Br 时,相应的Python代码如下: 上面的代码样例中,函数 intersected_area 的参数 a、b分别为两个圆的圆心坐标,r…