게임을 만들다 보면, 포물선을 구현할 일이 참 많다.
물건을 던진다거나, 포탄을 쏜다거나 등등 현실의 물리법칙에 기반한 포물선 운동을 구현해야 할 상황이 많은데 그 공식에 대해 정리해보고자 한다.
처음에 물체를 던지면, 어떠한 방향으로 힘을 가하게 될 것이다.
이 때, 힘이 가해지는 방향은 벡터로 표현할 수 있고, 해당 벡터의 길이로 가해진 힘을 구할 수 있을 것이다.
이렇게, 최초에 가해진 힘과 방향을 벡터 v로 표시할 수 있을 것이다.
이 벡터 v와 x축과의 사잇각을 theta라고 해보자.
그렇다면, 벡터 v를 아래와 같이 표현할 수 있다.
$$\vec{v} = \left (\left | v \right | * cos(\theta), \left | v \right | * sin(\theta)\right )$$
이 방향으로 계속 등속 운동을 한다고 가정한다면, t초 후의 벡터는 아래와 같을 것이다.
$$\vec{v} = \left (\left | v \right | * cos(\theta) * t, \left | v \right | * sin(\theta) * t\right )$$
하지만, 포물선 운동의 경우 x축에 대해선 등속운동을 진행하지만 y축의 경우엔 중력의 존재떄문에 등속운동을 진행할 수가 없다. 동일한 방향으로 직선 운동을 하되, 가속도의 영향을 계속 받기 때문에 y축의 경우엔 등가속도 직선 운동을 한다고 할 수 있다. 그러므로, 위의 수식의 x값은 맞다고 할 수 있지만, y값에 대해선 틀력다고 할 수 있다.
y축은 등가속도 직선 운동을 하기 때문에, 등가속도 직선 운동의 공식을 사용해야 한다.
등가속도 직선 운동에서 변위를 구하는 공식은 아래와 같다.
$$s = v * t \; + \frac{1}{2} * a * t^{2}$$
벡터의 속력은 벡터가 최초에 가지고 있던 원소의 값이라고 할 수 있다. (처음에 가한 힘)
가속도는 -9.8이며, 시간은 t가 될 것이다.
공식에 대입하면, t초 후의 변위는 아래와 같다.
$$s = \left | v \right | * sin(\theta) * t \; - \frac{1}{2} * 9.8 * t^{2}$$
즉, 포물선 운동을 (0, 0)에서 시작했다고 한다면, t초 후의 물체의 좌표는 아래와 같아지는 것이다.
$$(x, y) =(\left | v \right | * cos(\theta) * t ,\ \left | v \right | * sin(\theta) * t \; - \frac{1}{2} * 9.8 * t^{2})$$
현실에선 공기저항과 같은 마찰의 존재때문에, 위의 공식이 정확히 성립하지는 않는다.
하지만, 게임에서 포물선다운 포물선을 그리기에는 충분할 것이다.
'게임수학' 카테고리의 다른 글
게임 수학 - 벡터의 내적 (Dot Product) (0) | 2024.04.27 |
---|---|
게임 수학 - 벡터를 활용하여 방향, 위치 관계 구하기 (1) | 2024.04.02 |