To drugie z dwóch wyzwań dotyczących „napinania funkcji ciągnięcia”. Oto nieco prostsze Część I .
Let jazdy m gwoździ w płycie w pozycji (X 1 , Y 1 ) do (x m y m ) . Przywiąż gumkę do pierwszego i ostatniego z nich i rozciągnij wokół innych gwoździ, tak aby pasek przecinał wszystkie gwoździe w kolejności. Zauważ, że gumka opisuje teraz częściowo sparametryzowaną liniową funkcję (x (t), y (t)) w przestrzeni 2D.
Teraz wbij kolejne n gwoździ do tablicy, w pozycjach (x 1 , y 1 ) do (x n , y n ) . Jeśli teraz usuniemy wszystkie oryginalne gwoździe m, z wyjątkiem pierwszego i ostatniego (do którego są przywiązane końce gumy), gumka skróci się, dopóki nie będzie napięta wokół nowych gwoździ, dając kolejną funkcję liniową.
Jako przykład weź m = 12 początkowych gwoździ w pozycjach (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) i n = 10 kolejnych gwoździ w pozycjach (1, 1), (3, 1), (4, 4), (1, 3), (2, 2), (5, -1), (5, 0) ), (6, 2), (7, 1), (6, 0) . 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 zaciśnięcia gumki, jeśli masz trudności z jej wizualizacją:
Wyzwanie
Biorąc pod uwagę dwie listy „gwoździ”, narysuj napięty gumowy pasek wokół drugiej listy, jeśli zaczyna się od kształtu przechodzącego przez wszystkie gwoździe na pierwszej liście.
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 on mieć co najmniej 300 pikseli z każdej strony. Końcowa gumka i gwoździe muszą pokrywać co najmniej 75% poziomego i pionowego zasięgu obrazu. Waga długości z X i Y mają być takie same. Musisz pokazać paznokcie w drugim zestawie (używając co najmniej 3x3 pikseli) i sznurku (co najmniej 1 piksel szerokości). 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 na drugiej liście znajdują się w odległości co najmniej 10 -5 jednostek od początkowego kształtu gumki (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 przykłady:
{{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}}
A oto jeden przykład, który pokazuje znaczenie dwóch pozostałych gwoździ początkowych. Wynik powinien być b i nie :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
Dzięki Ellowi za ten przykład.