Saltar al contenido

¡Hora del espirógrafo!

Te damos la bienvenida a nuestra página web, ahora encontrarás la solucíon de lo que estabas buscando.

Solución:

Matemática, 120 bytes

f[R_,r_,d_]:=ParametricPlot[p#@t+#[-p*t/r]d&/@Cos,Sin,t,0,2r/GCD[p=R-r,r]Pi,PlotRange->400,ImageSize->800,Axes->0>1]

Código sin golf y salida de ejemplo: ingrese la descripción de la imagen aquí

Si puedo incluir los ejes en la trama, puedo guardar otros 9 caracteres.

JavaScript (ECMAScript 6) - 312 314 Caracteres

document.body.appendChild(e=document.createElement("canvas"))
v=e.getContext("2d")
n=(e.width=e.height=800)/2
M=Math
P=2*M.PI
t=0
p=prompt
r=p('r')
R=p('R')-r
d=p('d')
X=x=>n+R*M.cos(t)+d*M.cos(R/r*t)
Y=x=>n+R*M.sin(t)-d*M.sin(R/r*t)
v.beginPath()
v.moveTo(X(),Y())
for(;t

JSFDDLE

Salida de ejemplo

r=1,R=200,d=30

ingrese la descripción de la imagen aquí

Pitón: 579

Resumen

Esto no es competitivo en absoluto dada la respuesta de Mathematica, pero decidí publicarlo de todos modos porque las imágenes son bonitas y pueden inspirar a alguien o ser útil para alguien. Debido a que es mucho más grande, lo dejé básicamente sin golf. El programa espera una entrada de línea de comandos de R,r,d.

Captura de pantalla

Aquí hay dos ejemplos, uno para (5,3,5) y otro para (10,1,7)
ejemplo 5-3-5ejemplo 10-1-7

Código

import math
import matplotlib.pyplot as P
from matplotlib.path import Path as H
import matplotlib.patches as S
import sys
a=sys.argv
(R,r,d)=int(a[1]),int(a[2]),int(a[3])
v=[]
c=[]
c.append(H.MOVETO)
t=0
while(len(v)<3 or v.count(v[-1])+v.count(v[-2])<3):
 p=t*math.pi/1000
 t+=1
 z=(R-r)*p/r
 v.append((round((R-r)*math.cos(p)+d*math.cos(z),3),round((R-r)*math.sin(p)-d*math.sin(z),3)))
 c.append(H.LINETO)
c.pop()
v.append((0,0))
c.append(H.CLOSEPOLY)
f=P.figure()
x=f.add_subplot(111)
x.add_patch(S.PathPatch(H(v,c)))
l=R+d-r
x.set_xlim(-l-1,l+1)
x.set_ylim(-l-1,l+1)
P.show()

Finalizando este artículo puedes encontrar las interpretaciones de otros desarrolladores, tú igualmente tienes la libertad de dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.