Inviluppi di circonferenze – 2

La circonferenza al centro è costituita da NCIRCO punti distinti.
La circonferenza in movimento ha il centro in un punto della circonferenza centrale ed è costituita da Ncirco tratti continui.

Le immagini successive sono inviluppi di circonferenze intorno alla circonferenza centrale.
L’animazione ha una durata prefissata.

Ciambella (toro)

Il raggio esterno è costante

from vpython import *

R       = 1.0            # Raggio centrale
r       = 0.5            # Raggio esterno
DIM     = R+r+0.1        # Distanza massima finestra
Ncirco  = 60             # Numero tratti
NCIRCO  = 120            # Numero punti
DURATA  = 6              # Durata dell'animazione
RATE    = NCIRCO/DURATA  # Numero cerchi al secondo
STOP    = tau            # Angolo percorso
DELTA_a = STOP/Ncirco    # Passo angolo esterno
DELTA_A = STOP/NCIRCO    # Passo angolo centrale

def circonferenza(xc, yc):
    gc = gcurve(color=color.red)
    
    angolo = 0
    for i in range(Ncirco+1):
        x = xc+r*cos(angolo)
        y = yc+r*sin(angolo)
        gc.plot(pos=(x,y))
        
        angolo += DELTA_a

graph(title="Ciambella",
      width=640, height=640, xmin=-DIM, ymin=-DIM, xmax=DIM, ymax=DIM,
      fast=False)
gf=gdots(color=color.purple)

ANGOLO = 0
for i in range(NCIRCO):
    rate(RATE)
    
    x = R*cos(ANGOLO)
    y = R*sin(ANGOLO)
    gf.plot(pos=(x,y))
    circonferenza(x,y)
    
    ANGOLO += DELTA_A

Per realizzare le figure successive bisogna stabilire la funzione per la dimensione variabile del raggio esterno.


Nefroide

  • r = abs(xc), il raggio esterno è dato dalla distanza dall’asse y
  • DIM = R+R+0.1
from vpython import *

R       = 1.0
DIM     = R+R+0.1  # <---
Ncirco  = 60
NCIRCO  = 120
DURATA  = 6
RATE    = NCIRCO/DURATA
STOP    = tau
DELTA_a = STOP/Ncirco
DELTA_A = STOP/NCIRCO

def circonferenza(xc, yc):
    gc = gcurve(color=color.red)
    
    angolo = 0
    for i in range(Ncirco+1):
        r = abs(xc)    # <---
        x = xc+r*cos(angolo)
        y = yc+r*sin(angolo)
        gc.plot(pos=(x,y))
        
        angolo += DELTA_a

graph(title="Nefroide",
      width=640, height=640, xmin=-DIM, ymin=-DIM, xmax=DIM, ymax=DIM,
      fast=False)
gf=gdots(color=color.purple)

ANGOLO = 0
for i in range(NCIRCO):
    rate(RATE)
    
    x = R*cos(ANGOLO)
    y = R*sin(ANGOLO)
    gf.plot(pos=(x,y))
    circonferenza(x,y)
    
    ANGOLO += DELTA_A

Cardioide

  • r = dist((xc, yc), (0, 1)), il raggio esterno è dato dalla distanza dalla cuspide
  • DIM = R+R+R+0.1

Lumaca di Pascal

  • r = dist((xc, yc), (0, 1)) / 2, il raggio esterno è dato dalla metà della distanza dalla cuspide
  • DIM = R+R+0.1

Lascia un commento