Bir golf topu yörünge denklemine hava sürüklemesi ekleme


10

VB.NET 2005'te bir 2D golf oyunu geliştiriyorum, ancak topu etkilemesi gereken hava veya rüzgar sürüklemesinin nasıl uygulanacağına takıldım.

Zaten mermi için bu denklemler var:

  • vurulduğunda veya ateş edildiğinde ilk golfball hızı içinv0
  • Dikey ve yatay bileşenler golf topunun hızı:

    vx=v0cos(θ)vy=v0sin(θ)gt
  • Golf topunun dikey ve yatay mesafesi:

    x=v0cos(θ)ty=v0sin(θ)t(0.5)gt2

Golf topunun hızını düzgün bir şekilde etkilemek için bu denkleme hava sürüklemesini nasıl ekleyebilirim? Nasıl yapılacağı hakkında hiçbir fikrim yok, benzer denklemlerle çalışan var mı?

Yanıtlar:


10

Sürükleme veya rüzgar için kapalı bir formun olup olmadığından emin değilim, ancak adım adım bir şekilde simüle etmek oldukça kolaydır (tüm fizik kütüphanelerinin yaptığı gibi):

  1. başlangıç ​​durumunuzu ayarlayın:

    x,y,vx,vy(için t=0)
  2. güncelleme konumu:

    x=x+(vxxdt)y=x+(vyxdt)

    (burada dt, son güncellemeden bu yana geçen süredir, diğer bir deyişle delta zamanı)

  3. Bu hız yardımcılarını hesaplayın:

    v2=(vx)2+(vy)2|v|=v2

    (burada uzunluğunu temsil v )|v|v

  4. sürükleme kuvvetini hesapla:

    fdrbirg=cxv2

    (burada c sürtünme katsayısı küçüktür! )

  5. kuvvet biriktirmek:

    fx=(-fdrbirgxvx|v|)fy=(-fdrbirgxvy|v|)+(-gxmbirss)

    (burada golf topunuzun kütlesi)mbirss

  6. güncelleme hızı:

    vx=vx+fxxdtmbirssvy=vy+fyxdtmbirss

Temel olarak Euler'in bu fiziğe yaklaşma yöntemi .


Yorumlarda istendiği gibi simülasyon nasıl biraz daha:

  • (t=0)

x=0y=0vx=v0xcÖs(θ)vy=v0xsbenn(θ)

Temelde, t'nin her oluşumunun 0 ile değiştirildiği temel yörünge formülünüzle aynıdır.

  • KE=0.5m(V2)tv2

  • PE=mxgxy

  • (x,y)t1t=0t=t1

  • (x,y)t1t2t1<t2t1t2

Sözde kodu:

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

Bunun için çok teşekkür ederim, size geri dönmeyi deneyeceğim.
Smith

Sağladığınız bu denklemlerden, mevcut X & Y'yi bir süre (t) almak istiyorum, Vo'mu V_x ve Vo'yu v_y ile değiştirmeli miyim? Ayrıca topun atıldığı ilk KE'yi eklemem gerekirse, bu KE=0.5*m*(V*V)geçerli olur mu?
Smith

@Smith Sorularınızı cevaplamak için cevabımı düzenleyeceğim
Jonas Bötel

bu tam olarak yaptığım şeydi ve x her zaman negatif, neden?
Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.