골프 공 궤적 방정식에 에어 드래그 추가


10

VB.NET 2005에서 2D 골프 게임을 개발하고 있지만 공에 영향을 미치는 공기 또는 바람 드래그를 구현하는 방법에 붙어 있습니다.

이미 발사체에 대한 방정식이 있습니다.

  • 골프 공의 초기 속도에 대한 공격이나 해고v0
  • 수직 및 수평 구성 요소가 골프 공의 속도 :

    vx=v0cos(θ)vy=v0sin(θ)gt
  • 골프 공의 수직 및 수평 거리 :

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

골프 공의 속도에 적절하게 영향을 미치기 위해이 방정식에 공기 저항을 어떻게 추가합니까? 나는 그것을하는 방법을 모른다. 누구든지 비슷한 방정식을 사용 했습니까?

답변:


10

드래그 또는 바람에 대해 닫힌 양식이 있는지 확실하지 않지만 모든 물리 라이브러리와 같이 단계별 방식으로 시뮬레이션하는 것은 매우 쉽습니다.

  1. 초기 조건을 설정하십시오.

    x,y,vx,vy(for t=0)
  2. 위치 업데이트 :

    x=x+(vx×dt)y=x+(vy×dt)

    (여기서 dt는 마지막 업데이트 이후 경과 된 시간, 즉 델타 시간)

  3. 이 속도 도우미를 계산하십시오.

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

    (여기서 v 길이를 나타냄 )|v|v

  4. 항력 계산 :

    fdrag=c×v2

    (여기서 c는 마찰 계수가 작습니다! )

  5. 힘을 축적하십시오 :

    fx=(fdrag×vx|v|)fy=(fdrag×vy|v|)+(g×mass)

    mass

  6. 업데이트 속도 :

    vx=vx+fx×dtmassvy=vy+fy×dtmass

그것은 기본적으로 물리학을 근사하기위한 오일러의 방법 입니다.


의견에서 요청한 시뮬레이션 방법에 대해 조금 더 설명하십시오.

  • (t=0)

x=0y=0vx=v0×cos(θ)vy=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

정말 고마워요. 다시 시도하겠습니다.
Smith

당신이 제공 한 이러한 방정식에서, 주어진 시간 (t) 동안 현재 X & Y를 얻고 싶습니다 .V를 V_x로 바꾸고 Vo를 v_y로 바꾸어야합니까? 또한 공이 발사 된 초기 KE를 추가 해야하는 경우 KE=0.5*m*(V*V)유효합니까?
Smith

@Smith 질문에 대한 답변을 드리겠습니다.
Jonas Bötel

이것은 내가 한 일이며 x는 항상 음수입니다. 왜 그렇습니까?
Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.