Proiettile – 1

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

g = 9.8\ m/s^2
\displaystyle x = x_0 +v_{0x}t + \frac{1}{2} a_x t^2\displaystyle v_x = v_{0x} + a_x ta_x = 0
\displaystyle x_0 = 0\displaystyle v_{0x} = v_0 \cos \theta
\displaystyle y = y_0 +v_{0y}t + \frac{1}{2} a_y t^2\displaystyle v_y = v_{0y} + a_y ta_y = -g
\displaystyle y_0 = 0\displaystyle v_{0y} = v_0 \sin \theta

v_0 = 10\ m/s, \theta = \pi/4

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

  • \displaystyle T = 2\ \frac{v_0 \sin{\theta}}{g}, tempo di volo
  • \displaystyle H = \frac{v_0^2 \sin^2{\theta}}{2\ g}, altezza massima
  • \displaystyle R = \frac{v_0^2 \sin{2 \theta}}{g}, 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

Lascia un commento