リトルチャンドラーは悲しい。彼を元気づけるために彼に雲を引きます。
注:クラウドを描画しても、実際に彼を元気づけることはありません。
円は、3組として定義できます。(x,y,r)
ここx
で、デカルト平面上の円のx位置、デカルト平面上の円y
のy位置、およびr
円の半径です。x
そしてy
負でもよいです。r
常にポジティブです。入力は、スペースで区切られた3タプルの形式の円のリストです。例えば:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
3,1,1
手段「に中心点を有する円3,1
1つの半径を有する。3,2,1.5
手段」に中心点を有する円3,2
1.5半径を有します。
入力のこれらの円をすべてグラフに描画すると、次のようになります(わかりやすくするためにグリッド線とラベルを含めましたが、これらは必須ではありません)。
すべての円が凝集していることに注目してください。つまり、それらはすべて互いに重なり合っており、1つの大きなグループを形成し、残りの部分から分離された小さな円のグループはありません。入力は凝集性が保証されています。
ここで、これらの円によって形成される「境界線」の周りを移動する線を描き、他の線は一切ないとします。これは、すべての円によって形成されるシルエットの境界線を描くようなものです。結果のクラウドは次のようになります。
そのため、このクラウドは、境界を形成する入力内の円の円弧のみを描画することで形成され、単一の形状になります。言い換えると、クラウドは、別の円内にないアークを描くことによって形成されます。プログラムは、上記で説明した形式で入力を受け取り、結果のクラウドを表示する画像を出力します。雲の全体的な形状は正確でなければなりませんが、スケール、色、線の太さ、頂点の見え方はあなた次第です。クラウドが表示されている必要があるため、「このプログラムは白い背景に白い雲を描画する」、「このプログラムは無限に小さなスケールで雲を描画する」、「このプログラムは0の雲を描画する」また、境界線の色は塗りつぶしまたは背景の色と異なる必要があることに注意してください。
もう一つの例。入力:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
出力:
クラウドに「穴」がある場合は、穴も描画する必要があります。入力:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
出力:
重要なルールは次のとおりです。プログラムは境界を形成する線のみを描画する必要があります。つまり、単純に円を完全に描画してから、白い塗りでわずかに小さい円を描画することはできません。このメソッドはまだ境界を形成しない線を描画するため、後でそれらを覆うだけです。ルールの目的は、「円を描いてから、白い塗りで円をもう一度描く」実装、またはそれに類似したものを防ぐことでした。答えは、実際に描画する前に描画する場所を実際に計算することです。
これはコードゴルフであるため、最短の文字数が優先されます。