斯坦纳链是一组N个圆,每个圆与两个其他不相交的圆以及该链的上一个和下一个圆相切,如下图所示:
在此挑战中,您将编写一个程序/函数以递归方式绘制Steiner链,也就是说,给定链的圆将是链的另一次迭代的基础圆:
挑战
编写一个程序/函数,该程序/函数接受图像尺寸以及表示链的每个连续迭代中圆圈水平的整数列表,并输出绘制了递归Steiner链的图像。
输入值
您的程序/函数将接受2个参数:
s
-图片的宽度和高度ls
-表示链的每个连续迭代中存在的圆数的正整数列表,从最上链到最下链排序
输出量
您的程序/函数将输出尺寸为s
x 的图像,s
显示可追溯的Steiner链。
- 顶层基圆将与图像一样大,直径为
s
,位于图像内部 - 为了简化起见,Steiner链的2个基圆将是同心的,即2个基线圆的中心点将是相同的
- 给定的外半径,
R
和圆的在链条的数量,N
为内半径的公式R'
是R' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- 链的圆以及内部基圆将是链的下一次迭代的外部基圆
- 在通过链环递归时,下一个链的顺序应对应于中的下一个值
ls
- 在通过链的内圈递归时,顺序应与其父顺序相同(例如[5,2]):
- 所有链条应在深度为
ls
- 链条的旋转无关紧要:
- 但是,递归链相对于其父母中心点的旋转应相同:
- 所有圆都应画出轮廓或实心填充
- 颜色选择留给实现,除了漏洞(例如,用相同的颜色填充所有内容)
示例运行
在以下示例中,颜色由确定(depth of the recursion)^4
。
您可以在此处找到源。
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])
1
有关。
—
马丁·恩德