これは、「関数をピンと張る」ことに関する2つの課題のうちの2番目です。これが少し単純なパートIです。
(x 1、y 1)から(x m、y m)の位置でm個の釘をボードに打ち込みましょう。それらの最初と最後にゴムバンドを結び、他の釘の周りに伸びて、バンドがすべての釘を順番に横切るようにします。ラバーバンドは、2D空間で区分的線形パラメーター化関数(x(t)、y(t))を記述することに注意してください。
次に、位置(x 1、y 1)から(x n、y n)で、ボードに別のn個の釘を打ち込みます。最初と最後の(ゴムの端が結び付けられている)爪以外のすべての元の爪を削除すると、ゴムバンドは新しい爪の周りにぴんと張るまで短くなり、別の区分的線形関数が生成されます。
一例として、取るM = 12本の位置で最初の爪(0,0)、(2、-1)、(3/2、4/3)、(7/2、1/3)、(11/2を16/3)、(1、16 / 3)、(0、1)、(7、-2)、(3、4)、(8、1)、(3、-1)、(11、0)、およびn = 10は、位置(1、1)、(3、1)、(4、4)、(1、3)、(2、2)、(5、-1)、(5、0 )、(6、2)、(7、1)、(6、0)。次の3つのプロットは、上記のプロセスを示しています。
大きなバージョンの場合:右クリック->新しいタブで開く
また、ラバーバンドを視覚化するのが困難な場合の締め付けのアニメーションを次に示します。
チャレンジ
「釘」の2つのリストが与えられた場合、最初のリストのすべての釘を横断する形状から始まる場合、2番目のリストの周りにピンと張った輪ゴムをプロットします。
プログラムまたは関数を記述し、STDIN、ARGV、または関数引数を介して入力を取得できます。結果を画面に表示するか、画像をファイルに保存できます。
結果をラスタライズする場合、各辺が少なくとも300ピクセルである必要があります。最終的な輪ゴムと爪は、画像の水平および垂直範囲の少なくとも75%をカバーする必要があります。xとyの長さスケールは同じでなければなりません。2番目のセット(少なくとも3x3ピクセルを使用)と文字列(少なくとも1ピクセルの幅)に爪を表示する必要があります。軸を含めても含めなくてもかまいません。
色は選択できますが、少なくとも2つの区別できる色が必要です。1つは背景用、もう1つは爪と文字列用です(ただし、色は異なる場合があります)。
2番目のリストのすべての爪は、ゴムバンドの初期形状から少なくとも10 -5ユニット離れていると仮定できます(そのため、浮動小数点の不正確さを心配する必要はありません)。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
その他の例
さらに2つの例を示します。
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
そして、ここに残っている最初の釘のうちの2つの重要性を示す1つの例があります。その結果、あるべきB及びません 。
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
この例を提供してくれたエルに感謝します。