Inviluppi di sfere

Più sfere, disposte in modo strategico, realizzano delle figure interessanti.
La figura ottenuta dipende dalla posizione e dal raggio di ogni sfera.

from vpython import *
   
NUMERO = 100                  # Quante sfere
DURATA = 5                    # Quanti secondi

RATE   = NUMERO/DURATA        # Sfere al secondo
START  = -pi                  # Primo angolo
STOP   = +pi                  # Ultimo angolo
STEP   = (STOP-START)/NUMERO  # Passo tra due angoli   
RAGGIO = 0.5
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    
  
    x = angolo
    y = 0
    z = 0
   
    sphere(pos    = vector(x, y, z), 
           radius = RAGGIO         )

Le costanti iniziali permettono di decidere

  • il numero di sfere
  • la durata dell’animazione

Variando il colore di ciascuna sfere si rende più interessante il risultato finale

from vpython import *
   
NUMERO = 100                  # Quante sfere
DURATA = 5                    # Quanti secondi
RATE   = NUMERO/DURATA        # Sfere al secondo
START  = -pi                  # Primo angolo
STOP   = +pi                  # Ultimo angolo
STEP   = (STOP-START)/NUMERO  # Passo tra due angoli   
RAGGIO = 0.5
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    
  
    x = angolo
    y = 0
    z = 0
    
    red   = abs(cos(angolo))    
    green = 1-red
    blue  = 1
  
    sphere(color  = vector(red, green, blue), 
           pos    = vector(  x,     y,    z), 
           radius = RAGGIO                  )

from vpython import *
  
NUMERO = 100
DURATA = 5
RATE   = NUMERO/DURATA
START  = -2*pi
STOP   = +2*pi
STEP   = (STOP-START)/NUMERO
RAGGIO = 1
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    
 
    x = angolo
    y = cos(angolo)
    z = sin(angolo)

    red   = 0
    green = abs(y)
    blue  = abs(z) 
    
    sphere(color  = vector(red, green, blue), 
           pos    = vector(  x,     y,    z), 
           radius = RAGGIO                  )

from vpython import *
  
NUMERO = 100
DURATA = 5
RATE   = NUMERO/DURATA 
START  = -pi/2
STOP   = +pi/2
STEP   = (STOP-START)/NUMERO
  
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    
 
    x = angolo
    y = 0
    z = 0
    r = abs(cos(angolo))

    red   = r
    green = 0
    blue  = 1-r
 
    sphere(color  = vector(red, green, blue),
           pos    = vector(  x,     y,    z),
           radius = r                       )

from vpython import *
  
NUMERO = 100
DURATA = 5
RATE   = NUMERO/DURATA 
START  = 0
STOP   = 2*pi
STEP   = (STOP-START)/NUMERO
RAGGIO = 0.5
  
for angolo in arange(START, STOP, STEP):    
    rate(RATE)
 
    x = cos(angolo)
    y = sin(angolo)
    z = 0
  
    red   = abs(x)
    green = abs(y)
    blue  = 0

    sphere(color  = vector(red, green, blue),
           pos    = vector(  x,     y,    z), 
           radius = RAGGIO                  )

from vpython import *
 
NUMERO = 200
DURATA = 5
RATE   = NUMERO/DURATA 
START  = 0
STOP   = 2*pi
STEP   = (STOP-START)/NUMERO
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    

    x = cos(angolo)
    y = sin(angolo)
    z = 0
    r = abs(x)

    red   = abs(x)
    green = 0
    blue  = abs(y)
 
    sphere(color  = vector(red, green, blue),
           pos    = vector(  x,     y,    z),
           radius = r                       )

from vpython import *
 
NUMERO = 200
DURATA = 5
RATE   = NUMERO/DURATA 
START  = pi
STOP   = 3*pi
STEP   = (STOP-START)/NUMERO
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)

    x = cos(angolo)
    y = sin(angolo)
    z = 0
    r = sqrt(x*x+(1-y)*(1-y))

    red   = abs(y)
    green = 0
    blue  = abs(x)
 
    sphere(color  = vector(red, green, blue),
           pos    = vector(  x,     y,    z),
           radius = r                       )

from vpython import *
 
NUMERO = 200
DURATA = 5
RATE   = NUMERO/DURATA 
START  = pi
STOP   = 3*pi
STEP   = (STOP-START)/NUMERO
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    

    x = cos(angolo)
    y = sin(angolo)
    z = 0
    r = sqrt(x*x+(1-y)*(1-y))/2

    red   = 0
    green = abs(y)
    blue  = abs(x)
 
    sphere(color  = vector(red, green, blue,
           pos    = vector(  x,     y,    z),
           radius = r                       )

from vpython import *
 
NUMERO = 100
DURATA = 5
RATE   = NUMERO/DURATA 
START  = 0
STOP   = 2*pi
STEP   = (STOP-START)/NUMERO
RAGGIO = 0.2
 
for angolo in arange(START, STOP, STEP):    
    rate(RATE)    

    x = cos(angolo)
    y = sin(angolo)

    sphere(color = vector(abs(x), abs(y),      0), pos = vector(x, y, 0), radius = RAGGIO)
    sphere(color = vector(abs(x),      0, abs(y)), pos = vector(x, 0, y), radius = RAGGIO)
    sphere(color = vector(     0, abs(x), abs(y)), pos = vector(0, x, y), radius = RAGGIO)