Não tenho certeza se existe um formulário fechado para o arrasto ou o vento, mas é bastante fácil simular passo a passo (como todas as bibliotecas de física):
defina sua condição inicial:
x,y,vx,vy(for t=0)
atualizar posição:
x=x+(vx×dt)y=x+(vy×dt)
(em que dt é o tempo decorrido desde a última atualização, também conhecido como tempo delta)
calcule estes auxiliares de velocidade:
v2|v|=(vx)2+(vy)2=v2−−√
(onde representa o comprimento de v )|v|v
calcular força de arrasto:
fdr a g= c × v2
(onde c é o coeficiente de atrito pequeno! )
acumular forças:
fxfy= ( - fdr a g× vx| v |)= ( - fdr a g× vy| v |) +(- g× m a s s )
(onde é a massa de sua bola de golfe)m um s s
velocidade de atualização:
vx=vx+fx×dtmassvy=vy+fy×dtmass
Esse é basicamente o método de Euler para aproximar a física.
Um pouco mais sobre como a simulação foi solicitada nos comentários:
xyvxvy=0=0=v0×cos(θ)=v0×sin(θ)
É basicamente o mesmo que na sua fórmula básica de trajetória, onde toda ocorrência de t é substituída por 0.
KE=0.5m(V2)tv2
PE=m×g×y
(x,y)t1t=0t=t1
(x,y)t1t2t1<t2t1t2
Pseudo-có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