A livello del mare, terra piatta, no resistenza dell’aria, posizione iniziale della palla (0,0,0)
, ![]()

from vpython import *
angolo = 45 # in gradi
theta = radians(angolo) # in radianti
v0 = 10 # in m/s
g = 9.8
x0 = 0
y0 = 0
v0x = v0*cos(theta)
v0y = v0*sin(theta)
terreno = box(color = color.orange, size = vector(25, 0.1, 10))
RAGGIO = 0.25
palla = sphere(pos = vector(x0, y0, 0), radius = RAGGIO, make_trail = True)
cannone = cylinder(color = color.yellow, opacity = 0.5, pos = vector(x0, y0, 0),
size = vector(4*RAGGIO, 2*RAGGIO, 2*RAGGIO))
cannone.axis = rotate(cannone.axis, theta, vector(0, 0, 1))
x = x0
y = y0
vx = v0x
vy = v0y
t = 0
dt = 0.02
while(True):
rate(50)
vy = vy + -g*dt
x = x + vx*dt
y = y + vy*dt
palla.pos = vector(x, y, 0)
if(palla.pos.y <= 0):
break
t = t+dt
print("Angolo = {}, tempo = {:.2f}, distanza = {:.2f}".format(angolo, t, palla.pos.x))
Risultati
Angolo = 35, tempo = 1.14, distanza = 9.50
Angolo = 40, tempo = 1.28, distanza = 9.96
Angolo = 45, tempo = 1.42, distanza = 10.18 *
Angolo = 50, tempo = 1.54, distanza = 10.03
Angolo = 55, tempo = 1.64, distanza = 9.52
Formule aggiuntive
, tempo di volo
, altezza massima
, gittata
Il terreno ha una certa pendenza

from vpython import *
angolo = 45 # in gradi
theta = radians(angolo) # in radianti
v = 10 # in m/s
g = 9.8
x0 = 0
y0 = 0
v0x = v0*cos(theta)
v0y = v0*sin(theta)
terreno = box(color = color.orange, size = vector(25, 0.1, 10))
RAGGIO = 0.25
palla = sphere(pos = vector(x0, y0, 0), radius = RAGGIO, make_trail = True)
cannone = cylinder(color = color.yellow, opacity = 0.5, pos = vector(x0, y0, 0),
size = vector(4*RAGGIO, 2*RAGGIO, 2*RAGGIO))
cannone.axis = rotate(cannone.axis, theta, vector(0, 0, 1))
PENDENZA = +0.10 # in percentuale
PEND_RAD = asin(PENDENZA) # in radianti
PEND_TAN = tan(PENDENZA)
terreno.axis = rotate(terreno.axis, PEND_RAD, vector(0, 0, 1))
x = x0
y = y0
vx = v0x
vy = v0y
t = 0
dt = 0.02
while(True):
rate(50)
vy = vy + -g*dt
x = x + vx*dt
y = y + vy*dt
palla.pos = vector(x, y, 0)
if(palla.pos.y <= palla.pos.x*PEND_TAN):
break
t = t+dt
print("Angolo = {}, tempo = {:.2f}, distanza = {:.2f}".format(angolo, t, palla.pos.x))
Risultati con pendenza +10%
Angolo = 35, tempo = 0.98, distanza = 8.19
Angolo = 40, tempo = 1.12, distanza = 8.73
Angolo = 45, tempo = 1.26, distanza = 9.05
Angolo = 50, tempo = 1.40, distanza = 9.13 *
Angolo = 55, tempo = 1.52, distanza = 8.83
Risultati con pendenza -10%
Angolo = 35, tempo = 1.30, distanza = 10.81
Angolo = 40, tempo = 1.44, distanza = 11.18 *
Angolo = 45, tempo = 1.56, distanza = 11.17
Angolo = 50, tempo = 1.66, distanza = 10.80
Angolo = 55, tempo = 1.76, distanza = 10.21