スタイナーチェーンは、次の画像に示すように、各サークルがチェーンの前および次のサークルだけでなく、2つの他の交差しないサークルに接するN個のサークルのセットです。
この課題では、シュタイナーチェーンを再帰的に描画するプログラム/関数を作成します。つまり、特定のチェーンの円は、チェーンの別の反復の基本円になります。
チャレンジ
画像の寸法と、チェーンの各連続反復における円のレベルを示す整数のリストを受け入れるプログラム/関数を作成し、再帰シュタイナーチェーンが描画された画像を出力します。
入力
プログラム/関数は2つの引数を受け入れます。
s
-画像の幅と高さls
-チェーンの連続する各反復に存在する円の数を示す正の整数のリスト。最上位のチェーンから最下位のチェーンの順序
出力
プログラム/関数は、次元s
xのイメージを出力しs
、Resteinive Steinerチェーンを表示します。
- 最上位の基本円は
s
、画像の中心にある直径の画像と同じ大きさになります - 物事を簡単にするために、シュタイナーチェーンの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
関連。
—
マーティンエンダー