import pylab as pl; import matplotlib.patches as pt
import numpy as np; import random as rd
a,b,c,q=rd.randint(5,9),rd.randint(10,14),\
rd.randint(15,19),2*rd.randint(3,6)
n=rd.randint(4,16); yl=5.5
s1=r'$a=%d; \; b=%d; \; c=%d; \; q=%d; \; n=%d$'
def fy(t,k): return np.cos(np.pi*t/n+2*k*np.pi/q)+\
np.cos(a*np.pi*t/n+2*k*np.pi/q)+\
np.cos(b*np.pi*t/n+2*k*np.pi/q)+\
np.cos(c*np.pi*t/n+2*k*np.pi/q)
def fx(t,k): return np.sin(np.pi*t/n+2*k*np.pi/q)-\
np.sin(a*np.pi*t/n+2*k*np.pi/q)+\
np.sin(b*np.pi*t/n+2*k*np.pi/q)-\
np.sin(c*np.pi*t/n+2*k*np.pi/q)
L=np.array([[[fx(t,k),fy(t,k)]
for t in range(2*n)] for k in range(2*q)])
LT=[[[1.5*fx(t,k),1.2*fy(t,k)]
for t in range(2*n)] for k in range(2*q)]
pl.figure(figsize=(6,6)); ax=pl.gca(); pl.axis('off')
col=np.array([rd.randint(100,900)/1000
ax.add_patch(pt.Polygon(LT[k],alpha=.1,color=col))
ax.add_patch(pt.Polygon(L[k],fill=False,color=col/2,lw=.3))
pl.title(s1%(a,b,c,q,n)); pl.xlim(-yl,yl); pl.ylim(-yl,yl)
pl.tight_layout(); pl.show()
No comments:
Post a Comment