Epicykloida jest krzywa punktu na kole, jak to czyni rolki wokół drugiego okręgu. Cyclogon jest kształt punktem na wielokąta foremnego sprawia, gdyż rzuca w całej płaszczyźnie. NaEpicyclogon jest krzywa śledzone przez punkt na jednej wielokąta foremnego, jak toczy się wokół drugiego.
Napisz program, który rysuje epicyclogon podane r
, r1
, r2
, n1
, n2
:
r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values)
r1 = distance from center of stationary polygon to each of its vertices (positive real number)
r2 = distance from center of rolling polygon to each of its vertices (positive real number)
n1 = number of sides stationary polygon has (integer greater than 2)
n2 = number of sides rolling polygon has (integer greater than 2)
Notatki
- Kiedy
r
jest ujemny, wałek powinien odejść kierunku przeciwnym ruchu wskazówek zegara . - Bo
r
jeden obrót ma miejsce, gdy linia łącząca centroidy dwóch kształtów rozciąga się o pełne 360 stopni. Pojęcie to zostało rozszerzone o wszystkie wartościr
. (Tak więc w ćwierć obrotu linia łącząca centroidy rozciąga się o 90 stopni.) - Argumenty te powinny pochodzić z wiersza poleceń lub twój program powinien je o nie poprosić (np. W języku Python
input()
). r1
ir2
są względem siebie, a nie wymiary obrazu. Możesz więc ustawić jedną „jednostkę” na dowolną liczbę rzeczywistych pikseli.
Punkt, który musisz prześledzić, jest jednym z wierzchołków tocznego kształtu. Kształty muszą zaczynać się od tego wierzchołka, który dotyka nieruchomego wierzchołka i sąsiaduje z dwoma bokami:
Dokładne początkowe wierzchołki i kąt stacjonarnego wielokąta nie mają znaczenia.
Wydajność
Dane wyjściowe powinny przejść do obrazu o rozmiarze co najmniej 600 x 600 pikseli (lub innym zmiennym wymiarze niż można ustawić na 600). Musi pokazywać całą krzywą epicyklogonu określoną parametrami, dobrze wykadrowaną na obrazie.
Toczone i stacjonarne wielokąty muszą być również narysowane (z rolką w jej końcowym stanie). Dwa kształty i epicyclogon powinny mieć trzy zauważalnie różne kolory.
Musi również istnieć prosty sposób, aby nie rysować wielokątów (zmiana true
nafalse
w kodzie).
Pokaż nam co najmniej 2 obrazy wyjściowe. W razie potrzeby można je zmniejszyć.
Punktacja
Wygrywa najkrótszy kod, który produkuje prawidłowe obrazy wyjściowe.
Bonusy
- Minus 50 bajtów, jeśli wynikiem jest animowany gif (lub podobny) rysowanej krzywej.
- Minus 150 bajtów, jeśli pozwolisz
n1
in2
przyjmiesz wartość 2, aby kształty stały się odcinkami linii o długości2 * r1
(lubr2
), „toczącymi się” wokół siebie. To, jak poradzisz sobie,r
kiedyn1
i kiedyn2
masz 2 lata, zależy od ciebie, ponieważ centroidy nie obracają się wokół siebie, tak jak w innych przypadkach. (Brak „toczenia” w ogóle nie liczy się jako obsługa).
Ponieważ bardzo chętnie widzę, jak ten nowatorski pomysł został wykonany dobrze (i nie jest to dokładnie bułka z masłem), nagrodzę zwycięzcę 150 repozytorium nagród . Konkurs zakończy się tego samego dnia, w którym skończy się nagroda.
Nagroda nie zostanie przyznana zwycięzcy, jeśli jest jasne, że po prostu przepisali większość kodu z innego zgłoszenia.
Funkcje biblioteczne, które już to robią (jeśli takie istnieją) są niedozwolone.
Uwaga: Pochodzi z moich pozostałych pytań, które każdy może swobodnie publikować. Ale jeśli nikt inny ich nie opublikuje, istnieje duża szansa, że zdążę. : P