Proiettile – 3

Tutte le considerazioni sul moto di un proiettile ma con la presenza dell’aria si presenta una forza che cresce con il quadrato della velocità

\displaystyle |\vec{F}_D| = c\codt |\vec{v}|^2

from vpython import *
 
angolo = 30               # in gradi
theta  = radians(angolo)  # in radianti
v0     = 50               # in m/s
g      = 9.8
x0     = 0
y0     = 0
 
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, pos = vector(x0, y0, 0),
                   size = vector(4*RAGGIO, 2*RAGGIO, 2*RAGGIO), opacity = 0.5, )

palla.v      = rotate(vector(v0,0,0), theta, vector(0,0,1))
cannone.axis = rotate(cannone.axis, theta, vector(0, 0, 1))
 
m = 2     # Massa proiettile
c = 0.5   # Costante... resistenza aria
 
F1 = vector(0, -m*g, 0)
t  = 0
dt = 0.01
while(True):
    rate(100)
    F2 = -c * mag2(palla.v) * palla.v.hat
    F  = F1+F2           
    a  = F/m             

    palla.v   += a*dt                 
    palla.pos += palla.v*dt    
    if(palla.pos.y <= 0):
        break
     
    t = t+dt
 
print("Angolo = {}, tempo = {:.2f}, distanza = {:.2f}".format(angolo, t, palla.pos.x))

Si rende necessario

  • aumentare la velocità iniziale (10 –> 50)
  • diminuire l’alzo del cannone (45° –> 30°)

In particolare

\displaystyle \vec{F}_D = \frac{1}{2}\ \rho\ A\ C_D\ |\vec{v}|^2 (-\vec{v})

con

  • \rho, densità dell’aria
  • A, sezione frontale del proiettile
  • C_D, coefficiente di resistenza del priettile (dipende dalla forma)
  • |\vec{v}|^2, v^2, quadrato del modulo della velocità
  • (-\vec{v}), stessa direzione ma verso opposto
from vpython import *
 
angolo = 30               # in gradi
theta  = radians(angolo)  # in radianti
v0     = 50               # in m/s
g      = 9.8
x0     = 0
y0     = 0
 
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, pos = vector(x0, y0, 0),
                   size = vector(4*RAGGIO, 2*RAGGIO, 2*RAGGIO), opacity = 0.5, )

palla.v      = rotate(vector(v0,0,0), theta, vector(0,0,1))
cannone.axis = rotate(cannone.axis, theta, vector(0, 0, 1))
 
m   = 2            # Massa proiettile
rho = 1.2          # Densità dell'aria  
A   = 2*pi*RAGGIO  # Sezione frontale ...
Cd  = 0.5          # Coefficiente di resistenza ...
 
F1 = vector(0, -m*g, 0)
t  = 0
dt = 0.01
while(True):
    rate(100)
    F2 = -1/2 * rho * A * Cd * mag2(palla.v) * palla.v.hat
    F  = F1+F2           
    a  = F/m             

    palla.v   += a*dt                 
    palla.pos += palla.v*dt    
    if(palla.pos.y <= 0):
        break
     
    t = t+dt
 
print("Angolo = {}, tempo = {:.2f}, distanza = {:.2f}".format(angolo, t, palla.pos.x))

Sviluppi?

  • Colpire un bersaglio fisso
  • Due proiettili contemporaneamente (con un parametro diverso)?

Lascia un commento