ドメイン[ -3,3 ]で関数f(x)= sin(πx)+ 0.5 sin(3πx)をプロットしてみましょう。これは、ボード上にあるゆるいひもとして解釈できます。それでは駆動させ、N位置でボードに釘を(X 1、Y 1)と(X N、Y N)、X I ∈(-3,3)とY iは ∈[-1,1] 。文字列の最後に位置(-3,0)と(3,0)にある2つのアイレットがあると想像してください。これで、紐の端を取り、紐がぴんと張るまでアイレットに通すことができます。これにより、グラフが区分的線形関数に変形されます。
いくつかの写真が役立つ場合があります。で8本の釘を取り、(-0.5、0.8)、(0.5、0.4)、(1.2、-0.9)、(-2.5、-0.9)、(-1.2、0.2)、(-2.8、-0.7) (1.5、-0.6)、(1.8、-0.8) 。次の3つのプロットは、上記のプロセスを示しています。
大きなバージョンの場合:右クリック->新しいタブで開く
また、文字列を視覚化するのが困難な場合のストリングの引き締めのアニメーションを次に示します。
チャレンジ
「爪」のリスト(これは必ずしもソートされているわけではありません)が与えられた場合、上記の関数fの形状から始まる場合、それらの爪とピンと張った文字列をプロットします。
プログラムまたは関数を作成し、STDIN、ARGV、または関数引数を介して入力を取得できます。結果を画面に表示するか、画像をファイルに保存できます。
結果がラスタライズされる場合、少なくとも幅300ピクセル、高さ100ピクセルである必要があります。(-3、-1.1)から(3,1.1)までの座標範囲は、画像の水平および垂直範囲の少なくとも75%をカバーする必要があります。xとyの長さスケールは同じである必要はありません。爪(少なくとも3x3ピクセルを使用)と文字列(少なくとも1ピクセルの幅)を表示する必要があります。軸を含めても含めなくてもかまいません。
色は選択できますが、少なくとも2つの区別できる色が必要です。1つは背景用、もう1つは爪と文字列用です(ただし、色は異なる場合があります)。
すべての釘はfから少なくとも10 -5ユニット離れていると仮定できます(そのため、浮動小数点の不正確さを心配する必要はありません)。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
その他の例
さらに2つの(簡単な)例があります。
{{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}}
(文字列はx軸と一致します。)
{{-2.7, -0.5}, {-2.3, -0.5}, {-1.7, 0.5}, {-1.3, 0.5}, {-0.7, -0.5}, {-0.3, -0.5}, {0.5, 1}, {1.5, -1}, {2.5, 1}}