Idee da letture

fonte di ispirazione: Stan Wagon Guida a Mathematica McGrawHill Milano 1995

Il libro contiene applicazioni per Mathematica. Qui di seguito alcune "traduzioni".

In [1]:
import matplotlib.pyplot as plt
import numpy as np
import math
In [2]:
def rose(t,n):
    r = math.sin(n*t)
    x = r*math.cos(t)
    y = r*math.sin(t)
    return x,y

Rose a $n$ foglie e Rose di Maurer

In [8]:
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()

Variazioni sul moto circolare

In [9]:
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
In [12]:
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
In [13]:
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)