Um epiciclóide é a curva que um ponto em um círculo faz ao girar em torno de outro círculo. Um ciclogon é a forma que um ponto em um polígono regular faz ao rolar através de um plano. Um epiciclogon é a curva traçada por um ponto em um polígono regular enquanto ele gira em torno de outro.
Escreva um programa que desenha uma 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
- Quando
rnegativo, o rolo deve girar no sentido anti-horário . - Pois
r, uma revolução ocorre quando a linha que liga os centróides das duas formas varre 360 graus. Essa noção é expandida para incluir todos os valores der. (Então, em um quarto de revolução, a linha que liga os centróides varre 90 graus.) - Esses argumentos devem vir da linha de comando ou o seu programa deve solicitá-los (por exemplo, no Python
input()). r1er2são relativos um ao outro, não às dimensões da imagem. Assim, você pode definir uma "unidade" para qualquer número de pixels reais.
O ponto que você deve traçar é um dos vértices da forma rotativa. As formas devem começar com esse vértice tocando um vértice estacionário e dois lados adjacentes:

Os vértices iniciais exatos e o ângulo do polígono estacionário não importam.
Saída
A saída deve ir para uma imagem com pelo menos 600x600 pixels (ou alguma dimensão variável que pode ser definida como 600). Ele deve mostrar toda a curva epiciclogônica especificada pelos parâmetros, bem enquadrada na imagem.
Os polígonos rolantes e estacionários também devem ser desenhados (com o rolo em seu estado final). As duas formas e o epiciclogon devem ter três cores visivelmente diferentes.
Também deve haver uma maneira simples de não desenhar os polígonos ( basta uma alteração de truepara falseno código).
Por favor, mostre-nos pelo menos 2 imagens de saída. Não há problema em encolhê-los, se necessário.
Pontuação
O código mais curto que produz imagens de saída válidas vence.
Bónus
- Menos 50 bytes se a saída for um gif animado (ou semelhante) da curva que está sendo desenhada.
- Menos 150 bytes, se você deixar
n1en2pegar o valor 2, para que as formas se tornem segmentos de linha de comprimento2 * r1(our2), "rolando" entre si. A forma como você lida comrquandon1en2tem 2 é com você, uma vez que os centróides não giram em torno um do outro, da mesma forma que em outros casos. (Não "rolar" não conta como manipulá-lo.)
Como estou ansioso para ver essa idéia inovadora executada bem (e não é exatamente uma caminhada), vou premiar 150 representantes de recompensa ao vencedor. O concurso terminará no mesmo dia em que a recompensa acabar.
A recompensa não será concedida ao vencedor se estiver claro que ele simplesmente reescreveu a maior parte do código de outro envio.
As funções de biblioteca que já fazem isso (se houver) não são permitidas.
Nota: Isso veio das minhas perguntas restantes que qualquer pessoa é livre para postar. Mas se ninguém mais os publicar, há uma boa chance de que eu a tempo. : P




