这是给您一个看似具有挑战性的几何难题!
给定一个圆A
和n
其他圆B[n]
,找出包含在A
其中的总面积不在的任何圆之内B
。
您的代码应尽可能短。
输入项
您的输入应包含以下信息:
- 一个浮点数,表示圆的半径
A
。 - 浮点数列表,用于表示中的圆半径
B
。 - 中的圆心列表
B
。您的程序可能期望中心在极坐标或笛卡尔坐标中。 - (可选)您可能会收到
n
B中的圆圈数。此输入不是必需的。
假定圆心A
是原点,即点(0, 0)
。
这是保证没有两个圈子里B
是相同的,但不保证:1,各界B
相交A
,各中心B
在外面A
,或没有两个圆B
相交。确保您的解决方案可以处理各种边缘情况。
您可以以任何顺序接收输入,包括文本输入(通过stdin或您的语言的等效语言),函数参数或命令行参数的形式。
如果选择接收文本输入,则输入之间应有一个或两个字符的可打印ASCII分隔符。
输出量
您的程序或函数应输出一个浮点数,该数字代表A
不在的任何圆圈内的总面积B
。对于所有测试用例,您的答案应至少精确到三个有效数字。
通用代码高尔夫球规则适用。
您的解决方案不应依赖圆内的采样点来确定面积。
不允许使用自动定位圆的交点,在圆的交点内查找区域或立即解决此问题的内置函数。
测试用例
在每个图像中,圆圈A
以蓝色勾勒出轮廓,圆圈B
以绿色勾勒出黑色轮廓。应返回的区域以红色填充。
(特别感谢Rainer P.检查我的解决方案)
测试用例1:
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
测试案例2:
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
测试案例3:
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
测试案例4:
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
测试案例5:
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
建议阅读:
Fewell,国会议员“三个圆圈的常见重叠区域”。2006年10月。网站。http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf。
B
包含另一个圆圈。可能值得补充。
1.8970e+04
。
B[0] - A intersection: 20653.659515
, B[1] - A intersection: 20757.824115
, B[1] - B[0] intersection: 1841.847766
,B[2] - A intersection: 1289.164541
,这将产生18969.69009
作为答案。