---- 아래 내용은 네이버에서 퍼왔습니다.. -----------
포탄 비거리 계산 법
일단 바람이나 저항을 제외한 공식은요.
x:수평이동거리 y:수직이동거리 v_0:탄속 a_0:발사각 g:중력가속도 t:시간
x = ( v_0 cos a_0 )t y = ( v_0 sin a_0 )t -1/2gt^2 v_x = v_0 cos a_0 v_y = v_0 sin a_0 -gt
이걸풀면 포탄의 비행시간과 비행거리를 계산할수 있습니다. 이제 여기에다가 저항이나 다른 요소를 대입하면 되는데요.
정확한 공기저항은 유체역학에서 풍동실험이나 굉장히 복잡한 시뮬레이션을 통해 얻어지므로 전공자가 아니라면 만들기 어렵겠군요. 공기저항이 발생한다면 가속도가 중력가속도 이외에 다른 요소가 생기므로 가속도 성분을 다시 작성합니다. k = pCA/2m
p:공기밀도 A:물체의 그림자영역 C:끌림상수
a_x = -kvv_x, a_y = -g k kvv_y
a_x:수평방향가속도 a_y:수직방향가속도
이러한 저항으로 인해 공식이 변합니다.
x + dx = x + v_xdt, y + dy = y + v_ydt v_x + dv_x = v_x + a_xdt, v_y + dv_y = v_y + a_ydt
여기서 앞에 d가 붙는건 변화량이란 소리입니다. 미적분학 배우셨느면 아시겠죠...
프로그래밍을 하게 된다면 컴퓨터는 초기조건을 보고 바로 직접 원하는 데이터를 얻을수 있는게 아니라 초기조건후 일정시간이 흐른뒤의 데이터를 산출하고 또 그 데이터를 계산해서 다음 단위시간후의 데이터를 산출하는 방법으로 연속적으로 계산을 하는겁니다. 즉 프로그래밍시에 한번의 계산으로 값이 나오는게 아니고 루프를 써야합니다. 그리고 y값이 0이 될때 , 즉 수직 이동거리가 0이 되는점이 최종 목적이지겠군요. 데이터가 얼마나 오차값이 적은지는 단위시간을 얼마나 짧게 설정하느냐에 있구요. 단위시간이 너무 짧아진다면 컴퓨터가 연산을 하는데 무지 오래 걸리겠죠.
위에 무저항 공식을 수평성분가속도 a_0가 0이고 수직성분 가속도 a_y는 g라고 가정한 식입니다. 좌표를 산출하는 기본공식은
x = x_0 + v_0 t + 1/2 at^2 v = v_0^2 + 2a ( x - x_0 )
입니다. 이식을 x축공식 y축공시 두개를 작성하고 발사각요소를 대입합니다. 위의 좌표산출 공식이 단위 시간마다 루프를 돌고 루프안에는
a_x = -kvv_x, a_y = -kvv_y x = x + v_xh, y = y + v_yh v_x = v_x + a_xh, v_y = v_y + a_yh t = t + h
를 넣어 저항에 의한 좌표산출을 합니다. 만약에 바람이 분다면 풍속과 풍향을 따져서 좌표를 2차원에서 3차원으로 확장합니다.
a_x = -kvv_x, a_y = -kvv_y, a_z = -kvv_z x = x + v_xh........... .......................
바람이 들어가면 풍속,풍향에 따라 x축, y축, z축 성분에 대대적인 보수가 필요하군요. 예를 들어 v_x 대신에 {(바람속도 * cos풍향) + v_x}넣는등...
사실 포를 쏠때 정확하게 할려면 더 많은 조건들이 필요합니다. 습도나 공기밀도에 의한 탄의 초기속도변화(장약에 의한거죠)라던가 탄의 무게중심에 의한 자세변화를 따져서 C값이 변화하는것, 탄의 회전등 엄청난 변수가 있군요. 하지만 축사탄이라면 이런 영향을 받지만 단거리 고폭탄의 경우는 그냥 무저항공식을 써도 대충 잘 맞더군요. 폭탄이 워낙 무겁거든요. 그리고 대충 비슷하게 가면 그 다음은 수정탄으로 수정을 하는게 더 빠르고 쉽죠...
------------------------------------------------------------------------------ 위 공식을 이용한 정확한 소스를 구현하고 싶은데 수학적 지식이 짧은저로서는 도저히..ㅠㅠ
수학쪽을 실력있는분 간단한 [[[예제 소스]]] 하나 부탁드립니다..
|