Un épicycloïde est la courbe qu'un point sur un cercle fait en roulant autour d'un autre cercle. Un cyclogon est la forme qu'un point sur un polygone régulier prend lorsqu'il roule sur un plan. Un épicyclogon est la courbe tracée par un point sur un polygone régulier lorsqu'il s'enroule autour d'un autre.
Écrire un programme qui dessine un epicyclogon donné 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)
Remarques
- Lorsqu'il
r
est négatif, le rouleau doit aller dans le sens antihoraire . - Car
r
, une révolution se produit lorsque la ligne reliant les centroïdes des deux formes balaie 360 degrés. Cette notion est développée pour inclure toutes les valeurs der
. (Ainsi, en un quart de tour, la ligne reliant les centroïdes balaye de 90 degrés.) - Ces arguments devraient provenir de la ligne de commande ou votre programme devrait les demander (par exemple avec Python
input()
). r1
etr2
sont relatifs les uns aux autres, et non aux dimensions de l'image. Vous pouvez donc définir une "unité" comme étant un nombre quelconque de pixels réels.
Le point à tracer est l'un des sommets de la forme roulante. Les formes doivent commencer avec ce sommet touchant un sommet stationnaire et deux côtés adjacents:
Les sommets de départ exacts et l'angle du polygone stationnaire n'ont pas d'importance.
Sortie
La sortie doit aller vers une image d'au moins 600x600 pixels (ou une dimension variable qui peut être définie sur 600). Il doit montrer toute la courbe d'épicyclogone spécifiée par les paramètres, bien cadrée dans l'image.
Les polygones roulants et stationnaires doivent également être dessinés (avec le rouleau dans son état final). Les deux formes et l'épicyclogone doivent être de trois couleurs sensiblement différentes.
Il doit également y avoir un moyen simple de ne pas dessiner les polygones (un changement de true
à false
dans le code suffit).
Veuillez nous montrer au moins 2 images de sortie. Vous pouvez les rétrécir si nécessaire.
Notation
Le code le plus court qui produit des images de sortie valides l'emporte.
Bonus
- Moins 50 octets si la sortie est un gif animé (ou similaire) de la courbe en cours de dessin.
- Moins 150 octets si vous laissez
n1
etn2
prenez la valeur 2 pour que les formes deviennent des segments de ligne de longueur2 * r1
(our2
), "roulant" les uns sur les autres. La façon dont vous gérezr
quandn1
etn2
êtes 2 dépend de vous, car les centroïdes ne tournent pas l'un autour de l'autre comme ils le font dans d'autres cas. (Ne pas «rouler» du tout ne compte pas comme le manipuler.)
Étant donné que je suis très impatient de voir cette idée de roman bien exécutée (et ce n'est pas exactement un gâteau), je vais attribuer 150 représentants de primes au gagnant. Le concours se terminera le jour même où la prime s'épuise.
La prime ne sera pas attribuée au gagnant s'il est clair qu'il a simplement réécrit la plupart du code d'une autre soumission.
Les fonctions de bibliothèque qui se produisent déjà (s'il y en a) ne sont pas autorisées.
Remarque: cela vient de mes questions restantes que tout le monde est libre de publier. Mais si personne d'autre ne les affiche, il y a de fortes chances que je le fasse à temps. : P