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:
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
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)
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.