킹머핀의 제작 일지
물리) 속도와 가속도 그리고 탄성 본문
강의 들으면서 정리하는 거라 내용이 완전하지 않음.
두 벡터의 내적 : \( a ⋅ b = \begin{bmatrix}a_x\\a_y\\a_z \end{bmatrix} ⋅ \begin{bmatrix}b_x\\b_y\\b_z \end{bmatrix} = a_xb_x + a_yb_y + a_zb_z = \mid a\mid\mid b\mid \cos\theta \)
\[ \theta = cos^{-1}(\hat{a}⋅\hat{b}) \gg Normalize \gg cos^{-1}\frac{\hat{a}⋅\hat{b}}{\mid a\mid\mid b\mid} \]
두 벡터의 외적 : \( a\times b = \begin{bmatrix}a_x\\a_y\\a_z \end{bmatrix} \times \begin{bmatrix}b_x\\b_y\\b_z \end{bmatrix} = \begin{bmatrix}a_yb_z - a_zb_y\\a_zb_x - a_xb_z\\a_xb_y - z_yb_x \end{bmatrix} \)
\[ \mid a \times b\mid = \mid a\mid\mid b\mid sin\theta \]
두 벡터의 방향이 같으면 외적의 크기는 0.
외적(×)은 교환법칙이 성립 안 되므로 주의.
위치(p)를 미분하면 속도, 속도를 미분하면 가속도.
변화한 위치 : \( p' = p + \dot{p}t + \frac{1}{2}\ddot{p}t^2 \) = 기존 위치 + 속도 적분 + 가속도 2차 적분
하지만 보통 \( \frac{1}{2}\ddot{p}t^2 \) 은 더하지 않는다. 계산량이 많아지고, 있어도 별 차이도 없기 때문.
\[ p' = p + \dot{p}t = \begin{bmatrix}p_x + \dot{p_x}t \\p_y + \dot{p_y}t \\p_z + \dot{p_z}t \end{bmatrix} \]
F = ma = m\( \ddot{p} \), \( \ddot{p} = \frac{F}{m} \), 즉 가속도는 질량의 역수에 힘을 곱해서 구할 수도 있다.
변화한 속도 : \( \dot{p}' = \dot{p}d^t + \ddot{p}t \), d는 Damping or Drag. 최대 1에서 속도를 유지한다. (근데 왜 곱하지 않고 제곱을 하는 거지?)
달랑베르의 원리 : 힘(F)은 모든 힘(f)의 합이다. 유니티 Rigidbody의 Addforce()가 이 역할. 당연히 이 계산은 가속도를 적분하기 전에 완료해야 함.
후크의 법칙 : 스프링의 힘(The force exerted by a spring)은 원래(정지한) 길이에서 늘어나거나 줄어든 길이에만 의존한다.
\( f = -k\delta l = -k(l - l_0) = -k(\mid d\mid - l_0)\hat{d} \), \( d = x_A - x_B \) 이걸 이용하면 스프링과 비슷한 성질인 고무줄(복원력이 거의 한 쪽 방향에만), 부력(잠긴 정도와 표면 위로 뜨는 정도를 이용) 등을 구현할 수 있다.
아무 저항력이 없다면 스프링이나 부력은 영원히 운동할 것이다. 이것을 Simple Harmonic Motion이라고 한다. 그런데 후크의 법칙만 이용하면 오차가 누적돼서 부자연스러워보이는 문제가 생긴다. 그래서 위치를 '직접' 구해야 한다.
탄성력에 의한 SHM의 가속도 : \( \ddot{p} = -\chi^2p \), \( \chi^2 = \frac{k}{m} \)
위의 식은 \( F = ma = m\ddot{p} = -kp, m\ddot{p} + kp = 0, \ddot{p} + \frac{k}{m}p = 0 \) 으로 유도할 수 있다. (강의에서 못 배움)
저 출처에 의하면 미분 방정식의 계수를 따서 보조 방정식(특성 방정식)을 만들 수 있고, 그렇게 얻은 복소수 해를 오일러 공식을 통해 삼각함수 수식을 유도한 후 p를 구할 수 있다고 한다. 모르는 게 몇 개나 나온지 모르겠지만 대충 찾아보니 꽤 궁금해서 이해해보기로 했다.
우선 \( a\ddot{p} + b\dot{p} + cp = 0 \) 처럼 선형 방정식(p의 차수가 1로 보이긴 하지만 미분 가능한데 선형이 맞나..?)이자 2계 방정식인 식에서 일반해 \( p = e^{mx} \) 를 대입해본다. 아마도 \( e^{mx} \) 는 x가 어떤 수가 되더라도 절대 0이 되지 않는다는 점을 이용한 것 같다(그래서 x는 중요하지 않은 것 같다). 그럼 저 식은 \( e^{mx}(am^2 + bm + c) = 0 \) 가 된다.
저 식을 만족하는 m의 근을 근의 공식으로 실근 두 개, 중근, 켤레복소근 중에서 찾을 수 있는데, 지금 배우고 있는 것은 켤레복소근이 계산되는 경우인가보다. 즉 \( e^{\alpha + i\beta}, e^{\alpha - i\beta} \) 를 구할 것이고 이 두 근(근육 아님)은 (허수를 상수로 취급하기 위해)(매클로린 급수로 구할 수 있는)오일러 공식 \( e^{i\theta} = \cos\theta + i\sin\theta \) 을 통해 각각 삼각함수로 바꾸어 생각해볼 수 있다.
결국 SHM 가속도 편미분 방정식을 풀면 : \( p_t = p_0cos(\chi^t) + \frac{\dot{p_0}}{\chi}sin(\chi^t) \), 현재 시간의 위치(P_t)를 초기 위치(p_0)와 초기 속도(\( \dot{p_0} \))로 쉽게 구할 수 있게 된다. (참고 : 편미분의 반대는 상미분)
아무래도 핵심은 보조방정식 풀이인 것 같다. \( p_0, \frac{\dot{p_0}}{\chi} \) 은 어디서 튀어나왔는지나 매클로린 급수로 오일러 공식을 어떻게 만들었는지 등은 이 출처가 더 이해하기 쉬웠다. 결과가 0이 아니라 p_t이거나 삼각함수 각도가 \( \chi^t \) 인 것은 설명과 달라서 이해하지 못 했지만, 그래도 어떤 방식으로 전개되는지는 대충 알았다.
\( \ddot{p} = \frac{(p_t - p_0)}{t^2} - \dot{p_0} \) 이므로, 이제 위의 p_t를 구하면..!
저항이 없는 움직임이 어디 있단 말인가. 이제 저항력을 추가해서 Damped Harmonic Motion을 구현해야 한다.
\( f_{drag} = -\hat{\dot{p}}(k_1\mid \hat{\dot{p}}\mid + k_2\mid \hat{\dot{p}}\mid^2) \) 이렇게 \( -\hat{\dot{p}} \) 에 직선과 곡선을 더한 값을 곱해서 저항을 구현한다. 그런데 이번에도 k_2(속도의 제곱에 비례함)을 0으로 두어 \( k_2\mid \hat{\dot{p}}\mid^2 \) 를 없앤다. 왜냐하면..
탄성력에 의한 SHM의 가속도인 \( \ddot{p} = -\chi^2p \) 을 DHM의 가속도인 \( \ddot{p} = -kp - d\dot{p} \) 으로 바꾸는데, k_2를 0으로 두지 않으면 미분량이 많아지기 때문.
위의 편미분 방정식을 풀면 : \( p_t = [p_0\cos(\gamma t) + c\sin(\gamma t)]e^{-\frac{1}{2}dt} \)
\[ \gamma = \frac{1}{2}\sqrt{4k-d^2} \]
\[ c = \frac{d}{2\gamma}p_0 + \frac{1}{\gamma}\dot{p_0} \]
왜 감마가 저런 식인지는 모르겠지만 일단 근의 공식과 비슷하게 생겼다. c도 왜 저런 식인지 아직 모른다. 이제 현타 강하게 와서 더 이상 억지로 이해할 수가 없다. 나중에 수학 전공한 사람 만나면 이 글을 들이밀며 떠먹여달라고 부탁해야지.
\( \ddot{p} = \frac{(p_t - p_0)}{t^2} - \dot{p_0} \) 이므로, 이제 위의 p_t를 구하면..!
'인디 게임 개발 > 기획' 카테고리의 다른 글
물리) 전기 에너지 (0) | 2020.10.31 |
---|---|
물리) 유체의 운동 (0) | 2020.10.30 |
물리) 파동 에너지 (0) | 2020.10.19 |
물리) 강체의 운동 (0) | 2020.10.19 |
물리) 열 에너지 (0) | 2020.10.13 |