2D 행성 중력


15

나는 우주선이 발사 된 간단한 게임을 만들고 있는데 그 경로는 행성의 중력에 의해 영향을받습니다.

이 게임과 유사합니다 : http://sciencenetlinks.com/interactives/gravity.html

이 게임에서 행성이 우주선에 미치는 영향을 복제하여 우주선이 행성 주위를 '루프'하여 방향을 바꿀 수있는 방법을 알고 싶습니다.

나는 우주선이 행성 주위에 거대한 타원으로 고리를 이루거나 벡터를 사용하는 행성의 중력에 의해 약간 영향을받는 가짜 결과를 얻었습니다.

미리 감사드립니다.

추신 : 나는 게임 개발과 관련이없는 많은 코딩 경험을 가지고 있습니다.

답변:


15

귀하의 경우 모든 행성의 중력에 의해 영향을받는 우주선이 있습니다. 각 행성은 'm1 * m2 / r ^ 2'와 같은 힘을가하는데, 여기서 m1과 m2는 우주선과 행성의 질량을 나타내고 r은 행성과 우주선의 유클리드 거리와 같습니다. 당신은 선박에 적용된 모든 힘의 합계를 계산해야합니다. 뉴턴의 규칙에서 우리는 'f = m * a'를 알고 있습니다. 여기서 f는 물체에 가해지는 총 힘입니다 .m은 질량이고 a는 가속도입니다. 이 시점 에서이 페이지 를 읽고 가속을 사용하여 시간에 따른 속도와 위치를 계산하는 방법을 배울 수 있습니다 .


+1 멋진 리소스 연결, 4 차 Runge-Kutta 통합 방법 및 모든 것을 설명합니다.
David Gouveia

현재 나의 문제는 우주선이가는 길이다. 좀 더 '게임 같은'것이 필요합니다. 내가 의미하는 바를 보여주는 간단한 그림을 만들었습니다. i44.tinypic.com/2w2kdo4.jpg A는 내가 가진 것, B는 내가 원하는 것입니다.
구운

@baked : 그리고 행성의 질량을 증가시키는 것이 효과가 없을까요?
Jesse Emond

5
Gaffer on Games 기사 외에도이 Codeflow 기사 를 반드시 읽어야 합니다 ! Runge-Kutta는 가장 좋은 방법 은 아닙니다 .
sam hocevar

A가 있고 B를 원한다면 우주선의 초기 속도를 줄이는 것은 어떻습니까?
Ben

4

각 행성에는 물체를 중심으로 향하는 중력장이 있어야합니다. 다시 말해, 시뮬레이션의 각 단계에서 우주선의 위치에서 행성의 중심으로 힘을 가해 야합니다.

이 힘은 두 물체의 질량에 달려 있지만,이 경우 우주선의 질량은 아마도 행성의 질량에 비해 중요하지 않기 때문에, 기분이 나아질 때까지 행성의 크기에 따라 다른 상수를 시험해 볼 수 있습니다.

가장 중요한 것은이 힘이 두 물체 사이의 거리가 멀수록 약해집니다. 둘 사이의 제곱 거리로 나누면됩니다. 일정 거리가 지나면 "수동으로"컷오프하고 힘 적용을 중지 할 수 있습니다.

이 힘을 가속으로 변환하면 기본 물리 방정식이 나머지를 처리해야합니다.

의사 코드에서

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

이것은 실제로 내가 현재하고있는 방식과 매우 유사합니다. 어쩌면 상수를 가지고 노는 것의 문제일까요?
구운

2
확실하지 않지만 아마도 지금 조정 중일 것입니다. 또한 우주선에 궤도에 진입하기 위해 우주선에 적용하는 초기 힘에 달려 있다고 생각합니다.
David Gouveia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.