No estoy seguro si incluso existe una forma cerrada para arrastre o viento, pero es bastante fácil de simular paso a paso (como lo hacen todas las bibliotecas de física):
establece tu condición inicial:
x,y,vx,vy(for t=0)
posición de actualización:
x=x+(vx×dt)y=x+(vy×dt)
(donde dt es el tiempo transcurrido desde la última actualización, también conocido como tiempo delta)
calcule estos ayudantes de velocidad:
v2|v|=(vx)2+(vy)2=v2−−√
(donde representa la longitud de )|v|v
calcular la fuerza de arrastre:
fdrag=c×v2
(donde c es el coeficiente de fricción pequeño! )
acumular fuerzas:
fxfy=(−fdrag×vx|v|)=(−fdrag×vy|v|)+(−g×mass)
(donde es la masa de tu pelota de golf)mass
velocidad de actualización:
vx=vx+fx×dtmassvy=vy+fy×dtmass
Ese es básicamente el método de Euler para aproximar esas físicas.
Un poco más sobre cómo la simulación solicitada en los comentarios:
- La condición inicial en su caso es(t=0)
xyvxvy=0=0=v0×cos(θ)=v0×sin(θ)
Básicamente es lo mismo que en su fórmula de trayectoria básica donde cada aparición de t se reemplaza por 0.
La energía cinética es válida para cada . Ver como en (3) arriba.KE=0.5m(V2)tv2
La energía potencial también es siempre válida.PE=m×g×y
Si desea obtener la corriente para un determinado , lo que debe hacer es inicializar la simulación para y hacer pequeñas actualizaciones de dt hasta(x,y)t1t=0t=t1
Si ya calculó para un y desea conocer sus valores para un donde , todo lo que necesita hacer es calcular esos pequeños pasos de actualización de dt de a(x,y)t1t2t1<t2t1t2
Pseudocódigo:
simulate(v0, theta, t1)
dt = 0.1
x = 0
y = 0
vx = v0 * cos(theta)
vy = v0 * sin(theta)
for (t = 0; t < t1; t += dt)
x += vx * dt
y += vy * dt
v_squared = vx * vx + vy * vy
v_length = sqrt(v_squared)
f_drag = c * v_squared
f_grav = g * mass
f_x = (-f_drag * vx / v_length)
f_y = (-f_drag * vy / v_length) + (-f_grav)
v_x += f_x * dt / mass
v_y += f_y * dt / mass
end for
return x, y
end simulate