Narysujmy funkcję f (x) = sin (πx) + 0,5 sin (3πx) w domenie [-3,3] . Możemy to zinterpretować jako luźny sznurek leżący na desce. Teraz napęd n gwoździ do płyty w pozycji (X 1 , Y 1 ) do (x n , y n ) , gdzie x ı ∈ (-3,3) i Y i ∈ [-1,1] . Wyobraź sobie, że na końcu sznurka znajdują się dwa oczka, czyli pozycje (-3,0) i (3,0). Możemy teraz wziąć końce sznurka i przeciągnąć je przez oczka, aż sznurek będzie napięty. Spowoduje to deformację naszego wykresu w funkcję liniową.
Niektóre zdjęcia mogą pomóc. Weź 8 gwoździ w (-2,8, -0,7), (-2,5, -0,9), (-1,2, .2), (-0,5, .8), (0,5, .4), (1,2, -0,9), (1,5, -0,6), (1,8, -0,8) . Poniższe trzy wykresy pokazują proces opisany powyżej:
W przypadku większej wersji: kliknij prawym przyciskiem myszy -> Otwórz w nowej karcie
A oto animacja napinania sznurka, jeśli masz problemy z wizualizacją:
Wyzwanie
Biorąc pod uwagę listę „gwoździ” (które niekoniecznie są posortowane), wykreśl te gwoździe i napięty sznur, jeśli zaczyna się od kształtu powyższej funkcji f .
Możesz napisać program lub funkcję i przyjąć dane wejściowe za pomocą argumentu STDIN, ARGV lub funkcji. Możesz wyświetlić wynik na ekranie lub zapisać obraz w pliku.
Jeśli wynik jest zrasteryzowany, musi mieć co najmniej 300 pikseli szerokości i 100 pikseli wysokości. Zakres współrzędnych od (-3, -1,1) do (3,1.1) musi obejmować co najmniej 75% poziomego i pionowego zasięgu obrazu. Waga długości z X i Y nie muszą być takie same. Musisz pokazać paznokcie (używając co najmniej 3 x 3 piksele) i sznurek (co najmniej 1 piksel). Możesz włączyć lub nie osie.
Kolory są twoim wyborem, ale potrzebujesz co najmniej dwóch wyróżniających się kolorów: jednego dla tła i jednego dla paznokci i sznurka (te mogą mieć różne kolory).
Możesz założyć, że wszystkie gwoździe znajdują się w odległości co najmniej 10 -5 jednostek od f (abyś nie musiał się martwić niedokładnością zmiennoprzecinkową).
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Więcej przykładów
Oto dwa kolejne (prostsze) przykłady:
{{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}}
(Łańcuch pokrywa się z osią 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}}