Un epicicloide es la curva que forma un punto en un círculo a medida que rueda alrededor de otro círculo. Un cyclogon es la forma que forma un punto en un polígono regular cuando rueda a través de un plano. Un epiciclogón es la curva trazada por un punto en un polígono regular a medida que rueda alrededor de otro.
Escribir un programa que dibuja un epicyclogon dada 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)
Notas
- Cuando
r
es negativo, el rodillo debe ir en sentido antihorario . - Porque
r
, una revolución ocurre cuando la línea que conecta los centroides de las dos formas barre 360 grados completos. Esta noción se expande para incluir todos los valores der
. (Entonces, en un cuarto de revolución, la línea que conecta los centroides se extiende 90 grados). - Estos argumentos deben provenir de la línea de comando o su programa debe solicitarlos (por ejemplo, con Python
input()
). r1
yr2
son relativos entre sí, no las dimensiones de la imagen. Por lo tanto, puede configurar una "unidad" para que sea cualquier número de píxeles reales.
El punto que debe trazar es uno de los vértices de la forma ondulada. Las formas deben comenzar con este vértice tocando un vértice estacionario y dos lados adyacentes:
Los vértices iniciales exactos y el ángulo del polígono estacionario no importan.
Salida
El resultado debe ir a una imagen que tenga al menos 600x600 píxeles (o alguna dimensión variable que se pueda establecer en 600). Debe mostrar toda la curva de epiciclogón especificada por los parámetros, bien enmarcada en la imagen.
Los polígonos estacionarios y rodantes también deben dibujarse (con el rodillo en su estado final). Las dos formas y el epiciclogón deben ser tres colores notablemente diferentes.
También debe haber una manera simple de no dibujar los polígonos ( basta con un cambio de true
a false
en el código).
Muéstranos al menos 2 imágenes de salida. Está bien reducirlos si es necesario.
Tanteo
El código más corto que produce imágenes de salida válidas gana.
Bonos
- Menos 50 bytes si la salida es un gif animado (o similar) de la curva que se está dibujando.
- Menos 150 bytes si deja
n1
yn2
toma el valor 2 para que las formas se conviertan en segmentos de línea de longitud2 * r1
(or2
), "rodando" uno alrededor del otro. La forma en que manejar
cuándon1
yn2
son 2 depende de usted, ya que los centroides no giran uno alrededor del otro como lo hacen en otros casos. (No "rodar" en absoluto no cuenta como manejarlo).
Como estoy bastante ansioso por ver esta idea novedosa bien ejecutada (y no es exactamente un juego de niños), voy a otorgar 150 recompensas al ganador. El concurso finalizará el mismo día que se agote la recompensa.
La recompensa no se otorgará al ganador si está claro que simplemente reescribieron la mayor parte del código de otro envío.
Las funciones de biblioteca que ya hacen esto (si hay alguna) no están permitidas.
Nota: Esto vino de mis preguntas sobrantes que cualquiera puede publicar libremente. Pero si nadie más los publica, hay una buena posibilidad de que lo haga a tiempo. :PAGS