Saya tidak yakin apakah bahkan ada bentuk tertutup untuk drag atau angin, tetapi cukup mudah untuk mensimulasikan secara bertahap (seperti semua perpustakaan fisika lakukan):
atur kondisi awal Anda:
x , y, vx, vy( untuk t = 0 )
perbarui posisi:
x = x + ( vx× dt )y= x + ( vy× dt )
(di mana dt adalah waktu berlalu sejak pembaruan terakhir, alias waktu delta)
hitung pembantu kecepatan ini:
v2| v |= ( vx)2+ ( vy)2= v2--√
| v |v
menghitung gaya seret:
fdrag=c×v2
(di mana c adalah koefisien gesek kecil! )
mengumpulkan kekuatan:
fxfy=(−fdrag×vx|v|)=(−fdrag×vy|v|)+(−g×mass)
mass
perbarui kecepatan:
vx=vx+fx×dtmassvy=vy+fy×dtmass
Itu pada dasarnya Metode Euler untuk mendekati fisika itu.
Sedikit lebih banyak tentang bagaimana simulasi seperti yang diminta dalam komentar:
xyvxvy=0=0=v0×cos(θ)=v0×sin(θ)
Ini pada dasarnya sama dengan rumus lintasan dasar Anda di mana setiap kemunculan t diganti dengan 0.
KE=0.5m(V2)tv2
PE=m×g×y
(x,y)t1t=0t=t1
(x,y)t1t2t1<t2t1t2
Pseudo-Code:
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