ฉันไม่แน่ใจว่ามีรูปแบบปิดสำหรับการลากหรือลมอยู่หรือไม่ แต่เป็นการง่ายที่จะจำลองในแบบที่ชาญฉลาด (เหมือนที่ห้องสมุดฟิสิกส์ทำ)
กำหนดเงื่อนไขเริ่มต้นของคุณ:
x,y,vx,vy(for t=0)
อัปเดตตำแหน่ง:
x=x+(vx×dt)y=x+(vy×dt)
(โดยที่ dt คือเวลาที่ผ่านไปตั้งแต่การอัพเดตครั้งล่าสุดหรือเวลา delta)
คำนวณผู้ช่วยเหลือความเร็วเหล่านี้:
v2|v|=(vx)2+(vy)2=v2−−√
(โดยแสดงความยาวของv )|v|v
คำนวณแรงลาก:
fdrag=c×v2
(โดยที่ c คือสัมประสิทธิ์แรงเสียดทานน้อย! )
กองกำลังสะสม:
fxfy=(−fdrag×vx|v|)=(−fdrag×vy|v|)+(−g×mass)
(ที่คือมวลของลูกกอล์ฟของคุณ)mass
อัปเดตความเร็ว:
vx=vx+fx×dtmassvy=vy+fy×dtmass
นั่นเป็นวิธีการของออยเลอร์ในการประมาณฟิสิกส์เหล่านั้น
อีกเล็กน้อยเกี่ยวกับวิธีการจำลองตามที่ร้องขอในความคิดเห็น:
xyvxvy=0=0=v0×cos(θ)=v0×sin(θ)
โดยพื้นฐานแล้วมันเหมือนกับในสูตรวิถีการเคลื่อนที่ของคุณโดยที่การเกิดขึ้นของ t ทุกครั้งจะถูกแทนที่ด้วย 0
KE=0.5m(V2)tv2
PE=m×g×y
(x,y)t1t=0t=t1
(x,y)t1t2t1<t2t1t2
หลอกรหัสสินค้า:
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