3. 중력을 어떻게 계산해야 할까 - 스페이스 그래비티 개발기

phw3071·2022년 5월 5일
7
post-thumbnail

스페이스 그래비티 2편에서, "지금의 시뮬레이터의 물리 계산은 잘못되었다."고 말한 적이 있습니다. 그렇다면 제대로 중력을 계산하기 위해서 어떤 식을 세워야 하는 지를 알아보고자 합니다.

아마 물리학에 대해서 어느정도 알고 계신 분들은 별 거 아닌 걸로 생각하실 수 있습니다. 그렇지만 저는 학교에서 이와 관련한 내용을 자세히 배우지 못하였고, 기초적인 지식으로 바탕으로 스스로 알아가는 과정이라는 점을 양해해주시면 감사하겠습니다.

알고 있는 값과 구해야 되는 값

최종적으로 구해야 하는 값은 FxFy입니다.
그리고 알고 있는 값은 행성 1,2의 질량, 위치 입니다.

중력법칙에 의해 행성1이 받는 힘은 행성2가 받는 힘과 동일하기 때문에 행성 하나만 계산할 수 있다면 남은 하나의 행성도 계산이 가능합니다.

본격적으로 구해보자!

FxFy를 구하는 과정은 다음과 같습니다.

  1. 행성의 중심간의 거리(r)를 구한다.
  2. 중력(F)을 구한다.
  3. sinA와 cosA를 구한다. (이때 A는 r와 rx사이의 각)
  4. sin과 cos을 이용하여 Fx와 Fy를 구한다.

1. 행성의 중심 사이의 거리

행성의 중심 사이의 거리는 두 점 사이의 거리 공식을 이용해서 계산할 수 있습니다.

2. 중력

F1=F2=Gm1m2R2F_{1}=F_{2}=G{{m_{1}m_{2}} \over {R^{2}}}
F=GMmr2F=G{{Mm} \over {r^{2}}}

(위: 만유인력의 법칙, 아래: 만유인력의 법칙을 이용한 실제 필요한 식)

중력은 만유인력의 법칙을 이용하여 계산할 수 있습니다.
이때 반지름의 제곱이 필요하므로 행성의 중심 사이의 거리를 계산할 때 루트를 씌우지 않은 값을 그대로 사용하여 최적화를 할 수 있을 것으로 예상합니다.

3. sinA와 sinB

이는 삼각함수의 정의를 이용하여 구할 수 있습니다.

sinA=rxrsinA = {r_{x} \over r}
cosA=ryrcosA = {r_{y} \over r}

4. Fx와 Fy 구하기

2. 중력 에서 구한 FsinAsinB를 이용하며 분리하면 됩니다.

Fx=FcosAF_{x} = FcosA
Fy=FsinAF_{y} = FsinA

당연한 문제 발생

기울기가 양수인 대각선으로 배치기울기가 음수인 대각선으로 배치

역시 버그가 없으면 개발이 아니지 분명 이론상으로는 완벽했는데 문제가 생겼습니다.

사실 별 거는 아니었고, cosA를 넣어야 하는 자리에 sinA를 넣었던 것이 화근이었습니다 ㅋㅋㅋㅋㅋㅋㅋ

그래서 결국은...

성공!!!!!!!!!!!!!!

마무리

드디어 스페이스 그래비티의 가장 중심인 시뮬레이터를 성공적으로 만들었습니다.

그렇지만 아직 끝은 아닙니다. 가장 필수인 중력만을 구현했을 뿐, UI/UX 편의성도 개선을 해야 되고, 행성 고정, 시뮬레이터 변경, 시나리오 추가, 범위를 벗어난 행성 제거, 행성 충돌 시 충돌 구현 등 여러가지 할 일들이 남아 있습니다.

그래도 너무 행복하네요. 며칠동안 고생했던 문제인데 드디어 끝을 봤습니다.

끝!

profile
새로운 상상을 하고, 상상을 현실로 만드는 학생 개발자

2개의 댓글

comment-user-thumbnail
2일 전

좋아요 구독 알림설정 누르고 가요

1개의 답글