[C++] 3.2.5 두 공의 충돌 : 작용, 반작용, 충격량

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 게임 만들기 연습 문제 패키지 강의를 듣고 정리한 필기입니다.😀
🌜 공부에 사용된 홍정모 교수님의 코드들 보러가기
🌜 [홍정모의 게임 만들기 연습 문제 패키지] 강의 들으러 가기!


Chapter 3. 게임 물리 맛보기 : 공 두 개를 충돌시켜보자

벡터, 상대 속도 등등, 해당 강의에서 다루었던 물리학적 개념들이 문과생인 나에겐 생소하고 잘 와닿지 않았던 개념이라 강의를 필기하기에 앞서 개인적으로 따로 공부하여 정리해보았다.


🔔 뉴턴의 제 3 법칙 : 작용, 반작용

물체 A가 물체 B에 힘을 작용하면 물체 B는 물체A에게 크기는 같고 방향은 반대반작용의 힘을 동시에 가한다. 즉, 두 물체의 상호작용은 크기는 같고 방향은 반대다.

\[F_{AB}=-F_{BA}\]

  • 야구 방망이로 야구공에 10의 작용을 가하면 야구공도 야구방망이에 똑같은 크기 10에 방향은 정반대반작용 힘을 가한다.


🔔 속도 변화량

\[△\vec{v}={\vec{J}\over{m}}={j×\vec{n}\over{m}}\]

  • 속도변화량충격 힘의 벡터 / 질량 이다.
    • 가속도 = 힘(벡터)/질량
      • \(F=ma\)
      • \(a={F\over{m}}\)
    • 속도변화량가속도나 마찬가지다. 위 공식에서 나온 것!
  • 충격의 방향은 \(\vec{n}\)(단위 벡터)이며
  • 충격량, 즉 충격의 크기는 \(j\)가 된다.

image

  • 🔴공의 중심을 \(p_0\), 질량을 \(m_0\)
  • 🟡공의 중심을 \(p_1\), 질량을 \(m_1\) 이라고 할 때

\[\vec{v_0}^{new}=\vec{v_0}^{old}+{j×\vec{n_1}\over{m_0}}\]

\[\vec{v_1}^{new}=\vec{v_1}^{old}-{j×\vec{n_1}\over{m_1}}\]

  • ✨\(\vec{n_1}\)✨ 방향을 가지는 🟡공이 🔴공에게 충돌을 가했을 때를 기준으로 삼아 생각해보자.
    • 충돌시 🔴공은 🟡으로부터 🟡의 작용을 받고
      • 작용 방향 👉 \(vec{n_1}\)
      • 🔴공의 충돌 후 속도 = 🔴공의 충돌 전 속도 + 🔴공의 속도 변화량
        • \[\vec{v_0}^{new}=\vec{v_0}^{old}+△\vec{v_0}\]
          • 🔴공의 속도 변화량
            • \[△\vec{v_0}={j×\vec{n_1}\over{m_0}}\]
    • 충돌시 🟡공은 🔴으로부터 🔴의 반작용을 받는다.
      • 반작용 방향 👉 \(-vec{n_1}\)
      • 🟡공의 충돌 후 속도 = 🟡공의 충돌 전 속도 + 🟡공의 속도 변화량
        • \[\vec{v_1}^{new}=\vec{v_1}^{old}+△\vec{v_1}\]
          • 🟡공의 속도 변화량
            • \[△\vec{v_1}={j×(-\vec{n_1})\over{m_1}}\]
  • 뉴턴의 제 3 법칙에 따라 \(\vec{n_1}\) 방향으로 🟡공이 🔴공에게 충돌을 가했을 때
    • 두 공이 받는 충격의 크기는 \(j\)로 같고
    • 🔴공은 작용으로 \(\vec{n_1}\) 방향의 힘을 받고
    • 🟡공은 반작용으로 \(-\vec{n_1}\) 방향의 힘을 받는다.


🔔 충격량 j 구하기

image

  • 두 공이 충돌 이후에 그 충돌로 인한 속도 값을 업데이트 하려면 충격량 j 값을 알아야 한다.
    • 속도 변화량의 공식은 \(△\vec{v}={j×\vec{n}\over{m}}\) 이기 때문이다.
  • 충격량 j구하는 공식은 상대 속도의 공식으로부터 도출된다.
    • 도출 과정은 위 사진 참고

\[j={-(1+\epsilon)\vec{v_{0\vert{1}}}\cdot\vec{n_1}\over{1\over{m_0}}+{1\over{m_1}}}\]



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

C++ games 카테고리 내 다른 글 보러가기

댓글 남기기