Esercizio di fisica

In progress…

from vpython import * 
#------------------------------------------------------------------------------------ ASSI
DIST   = 100         # Asse x positivo
DIST2  = DIST/2      #
DIST3  = DIST/3      #
DIST4  = DIST/4      #
DIST6  = DIST/6      # Raggio spirale
DIST8  = DIST/8      # Campo magnetico

DURATA = 10          # Durata, da x=0 a x=DIST
RATE   = 25          # Numero frame al secondo
x0     = 0           # Posizione iniziale x
#-------------------------------------------------------------------------------------
X_max =  DIST ; X_min = -DIST4
Y_max =  DIST2; Y_min = -DIST4
Z_max =  DIST2; Z_min = -DIST2

asseX = arrow(axis = vector(X_max-X_min, 0, 0), pos = vector(X_min, 0, 0), color = color.red  , headlength=2, headwidth=1.5, shaftwidth = 0.5)
asseY = arrow(axis = vector(0, Y_max-Y_min, 0), pos = vector(0, Y_min, 0), color = color.green, headlength=2, headwidth=1.5, shaftwidth = 0.5)
asseZ = arrow(axis = vector(0, 0, Z_max-Z_min), pos = vector(0, 0, Z_min), color = color.blue , headlength=2, headwidth=1.5, shaftwidth = 0.5)
   
label(box = False, opacity = 0, pos = vector(X_max+2, 0, 0), text = "x")
label(box = False, opacity = 0, pos = vector(0, Y_max+2, 0), text = "y")
label(box = False, opacity = 0, pos = vector(0, 0, Z_max+2), text = "z")
#------------------------------------------------------------------------------------ CAMPO MAGNETICO
magn_1 = arrow(axis = vector(X_max-X_min, 0, 0), pos = vector(X_min, 3*DIST8, 0), color = color.cyan, headlength=2, headwidth=1.5, shaftwidth = 0.5)
magn_2 = arrow(axis = vector(X_max-X_min, 0, 0), pos = vector(X_min, 2*DIST8, 0), color = color.cyan, headlength=2, headwidth=1.5, shaftwidth = 0.5)
magn_3 = arrow(axis = vector(X_max-X_min, 0, 0), pos = vector(X_min,   DIST8, 0), color = color.cyan, headlength=2, headwidth=1.5, shaftwidth = 0.5)

label(box = False, opacity = 0, pos = vector(X_max+2, 3*DIST8, 0), text = "-")
label(box = False, opacity = 0, pos = vector(X_max+2, 2*DIST8, 0), text = "-")
label(box = False, opacity = 0, pos = vector(X_max+2,   DIST8, 0), text = "-")  
#------------------------------------------------------------------------------------ SFERA
sfera = sphere(color = color.yellow, radius = 1,
               make_trail = True, trail_color = color.white, retain = 250)
    
vx = DIST/DURATA     # Velocità orizzontale
va = pi              # Velocità angolare (mezzo giro al secondo)
dt = 1/RATE          # Passo del tempo

x      = x0
angolo = pi/2        # angolo iniziale
while(True):
    rate(RATE)       # sincronizza...
   
    sfera.pos = vector(x, DIST6+DIST6*sin(angolo), -DIST6*cos(angolo))
   
    x        += vx*dt  # aggiorna la posizione orizzontale
    angolo   += va*dt  # aggiorna l'angolo
 
    if(x > DIST):
        x = x0