fonte di ispirazione: Stan Wagon Guida a Mathematica McGrawHill Milano 1995
Il libro contiene applicazioni per Mathematica. Qui di seguito alcune "traduzioni".
import matplotlib.pyplot as plt
import numpy as np
import math
def rose(t,n):
r = math.sin(n*t)
x = r*math.cos(t)
y = r*math.sin(t)
return x,y
X = []
Y = []
t = 0
n = 360
dt = 2*math.pi/n
# scegiere un passo per cui gcd(passo,360)=1
passo = 71
salto = 0
# se foglie è pari numero di foglie 2*foglie se dispari foglie (più interessanti foglie pari)
foglie = 6
while t<=2*math.pi:
a,b = rose(t,foglie)
X.append(a)
Y.append(b)
t += dt
X = np.array(X, dtype=np.float64)
Y = np.array(Y, dtype=np.float64)
lX = []
lY = []
lX.append(0)
lY.append(0)
k = 0
while k <= 720:
salto = (salto + passo)%360
lX.append(X[salto])
lY.append(Y[salto])
k += 1
lX = np.array(lX, dtype=np.float64)
lY = np.array(lY, dtype=np.float64)
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(15, 15))
ax1.set_aspect('equal', 'box')
ax1.axis([-1, 1, -1, 1])
ax1.axis('off')
titolo1 = 'rosa a '+str(foglie)+' foglie'
ax1.set_title(titolo1)
ax1.plot(X, Y)
ax2.set_aspect('equal', 'box')
ax2.axis([-1, 1, -1, 1])
ax2.axis('off')
titolo2 = 'rosa di Maurer: passo '+str(passo)+'°'
ax2.set_title(titolo2)
ax2.plot(lX,lY,'k-',linewidth=0.2)
plt.show()
def circ(t,a,b,c):
x = (2+math.sin(a*t)/2)*math.cos(t+math.sin(b*t)/c)
y = (2+math.sin(a*t)/2)*math.sin(t+math.sin(b*t)/c)
return x,y
def tracciaStella(parametro,quadx,quady):
cX = []
cY = []
t = 0
n = 720
dt = 2*math.pi/n
while t<=2*math.pi:
a,b = circ(t,parametro[0],parametro[1],parametro[2])
cX.append(a)
cY.append(b)
t += dt
cX = np.array(cX, dtype=np.float64)
cY = np.array(cY, dtype=np.float64)
m = len(cX)
starX = []
starY = []
for k in range(0,m-1):
starX.append(0)
starX.append(cX[k])
starY.append(0)
starY.append(cY[k])
starX = np.array(starX, dtype=np.float64)
starY = np.array(starY, dtype=np.float64)
riquadro[quadx,quady].set_aspect('equal', 'box')
riquadro[quadx,quady].axis('off')
titolo = 'parametri = '+str(parametro)
riquadro[quadx,quady].set_title(titolo)
riquadro[quadx,quady].plot(starX,starY,'k-',linewidth=0.1)
r = 0
for i in np.arange(0.,1.05,0.05):
figX = []
figY = []
t = 0
while t<=2*math.pi:
a,b = circ(t,parametro[0],parametro[1],parametro[2])
figX.append(r*a)
figY.append(r*b)
t += dt
figX = np.array(figX, dtype=np.float64)
figY = np.array(figY, dtype=np.float64)
riquadro[quadx,quady].plot(figX,figY,'k-',linewidth=0.2)
r += 0.05
figura, riquadro = plt.subplots(2,2, figsize=(15, 15))
tracciaStella([8,16,4],0,0)
tracciaStella([9,6,6],0,1)
tracciaStella([8,16,16],1,0)
tracciaStella([6,18,18],1,1)