≡ Menu

Rosa di Maurer

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(), 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 (\(r = sin(n \theta)\)) 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, \((0, 0)\), e cammina lungo una retta fino al punto \((sin(nd), d)\). Successivamente, nella seconda tappa del viaggio, l’osservatore cammina lungo una retta verso il punto successivo, \((sin(n·2d), 2d)\), e così via. Infine, nell’ultima tappa del viaggio, l’osservatore cammina lungo una retta, dal punto \((sin(n·359d), 359d)\) al punto finale, \((sin(n·360d), 360d)\). L’intero percorso rappresenta la Rosa di Maurer della rosa \(r = sin(nθ)\). Una Rosa di Maurer è una curva chiusa poiché il punto di partenza, \((0, 0)\), e il punto di arrivo, \((sin(n·360d), 360d)\), 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:

  1. 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.
  2. 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, (\(r = \sin(n\theta)\)), e la converte in coordinate cartesiane.
  3. 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.
  4. 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).

{ 0 comments… add one }

Rispondi