
La Rosa di Maurer è un oggetto geometrico introdotto da Peter M. Maurer nel suo articolo intitolato “A Rose is a Rose…“: consiste in una serie di linee che collegano alcuni punti su una curva a forma di rosa.
Consideriamo una rosa nel sistema di coordinate polari definita da
r=sin(nθ), dove n è un intero positivo.
La rosa ha (n) petali se (n) è dispari, e (2n) petali se (n) è pari.
Prendiamo 361 punti sulla rosa, dati dalla coppia ((sin(nk), k)) per (k = 0, d, 2d, 3d, …, 360d), dove (d) è un intero positivo e gli angoli sono in gradi, non in radianti.
Una Rosa di Maurer della rosa () consiste nelle 360 linee che collegano successivamente i suddetti 361 punti. Quindi una Rosa di Maurer è una curva poligonale con vertici su una rosa.
Una Rosa di Maurer può essere descritta come un percorso chiuso nel piano polare. Un osservatore inizia il suo viaggio dall’origine, , e cammina lungo una retta fino al punto
. Successivamente, nella seconda tappa del viaggio, l’osservatore cammina lungo una retta verso il punto successivo,
, e così via. Infine, nell’ultima tappa del viaggio, l’osservatore cammina lungo una retta, dal punto
al punto finale,
. L’intero percorso rappresenta la Rosa di Maurer della rosa
. Una Rosa di Maurer è una curva chiusa poiché il punto di partenza,
, e il punto di arrivo,
, coincidono.
La seguente figura mostra l’evoluzione di una Rosa di Maurer (n = 2, d = 29°).
Visualizzazione con Python
import numpy as np
import matplotlib.pyplot as plt
import imageio
def get_rose_xy(n, d):
"""Get the Cartesian coordinates for points on the rose."""
k = d * np.linspace(0, 361, 361)
r = np.sin(np.radians(n * k))
x = r * np.cos(np.radians(k))
y = r * np.sin(np.radians(k))
return x, y
# Parametri per la generazione della gif
n = 6 # Valore fisso di n
d_values = np.arange(2, 401) # Valori di d da 2 a 400
duration = 0.1 # Durata di ogni frame nella gif
# Creazione dei frame e salvataggio come gif
frames = []
fig, ax = plt.subplots()
for d in d_values:
ax.clear()
x, y = get_rose_xy(n, d)
ax.plot(x, y, c='r', lw=0.5)
ax.axis('equal')
ax.axis('off')
fig.canvas.draw()
frame = np.array(fig.canvas.renderer._renderer)
frames.append(frame)
imageio.mimsave('maurer_rose.gif', frames, duration=duration)
Il codice Python fornito genera una visualizzazione di una Rosa di Maurer. Ecco una descrizione dettagliata del codice:
- Import delle librerie necessarie: Il codice inizia importando le librerie numpy, matplotlib.pyplot e imageio. Numpy è utilizzato per le operazioni matematiche, matplotlib.pyplot per la creazione dei grafici e imageio per la creazione di una gif.
- Definizione della funzione get_rose_xy(n, d): Questa funzione prende due parametri, (n) e (d), e restituisce le coordinate cartesiane dei punti sulla rosa. Utilizza la formula della rosa nel sistema di coordinate polari, (
), e la converte in coordinate cartesiane.
- Parametri per la generazione della gif: Qui vengono definiti i parametri per la creazione della gif. (n) è fissato a 6, i valori di (d) vanno da 2 a 400 e la durata di ogni frame nella gif è impostata a 0.1 secondi.
- Creazione dei frame e salvataggio come gif: In questo blocco di codice, viene creata una gif della Rosa di Maurer. Per ogni valore di (d) nell’intervallo specificato, viene generato un frame della gif. Ogni frame è un grafico della Rosa di Maurer per un dato valore di (d). I frame vengono quindi salvati come una gif utilizzando la funzione mimsave di imageio.
Il risultato finale è una gif animata che mostra l’evoluzione della Rosa di Maurer al variare del parametro (d).