2011-04-08 3 views
0

두 개체의 중력을 다루는 자습서를 아는 사람이 있습니까? 예 : 위성은 달에 끌려 간다.Gravitational Pull

저는 작업중인 작은 자바 게임이있어서 그 게임에 그 기능을 구현하고 싶습니다.

2 개의 시체 사이에 중력 추력 공식이 있지만, 게임에서 사용하려고하면 아무 일도 일어나지 않습니까?

화면에는 두 개의 객체가 있으며 그 중 하나는 항상 고정되어 있으며 다른 객체는 고정 된 객체의 감지 범위 내에 올 때까지 일정한 속도로 직선으로 이동합니다. 어느 지점에서 고정 된 물체에 그려야합니다. 먼저 두 물체 사이의 거리를 계산하고 질량과 거리에 따라 x 좌표와 y 좌표를 업데이트합니다.

하지만 내가 말한 것처럼 아무 일도 일어나지 않습니다. 수식을 올바르게 구현하지 않습니까?

나는 지금까지 가지고있는 것을 보여주기 위해 몇 가지 코드를 포함시켰다. 파티클 게이트 검출 범위와 충돌하고

// Calculate the gravitational pull between objects 
public void calcGravPull(int mass1, int mass2, double distBetweenObjects) 
{ 
    double gravityPull; 
    gravityPull = GRAV_CONSTANT * ((mass1 * mass2)/(distBetweenObjects * distBetweenObjects)); 

    x += gravityPull; 
    y += gravityPull; 
} 

답변

-1

알고리즘 인 운동을 수행하도록

for (int i = 0; i < particle.length; i++) 
    { 
     // ************************************************************************************************** 
     //           GATE COLLISION 
     // ************************************************************************************************** 
     // Getting the instance when a Particle collides with a Gate 
     if (getDistanceBetweenObjects(gate.getX(), particle[i].getX(), gate.getY(), particle[i].getY()) <= 
      sumOfRadii(particle[i].getRadius(), barrier.getRadius())) 
     { 

      particle[i].calcGravPull(particle[i].getMass(), barrier.getMass(), 
        getDistanceBetweenObjects(gate.getX(), particle[i].getX(), gate.getY(), particle[i].getY())); 
     } 

그리고 내 입자 클래스의 방법으로 인출되기 시작시기 이 인스턴스는 옳은. 아마도 당신이 계산 한 중력 끌기가 너무 작아 보이지 않을 것입니다. GRAV_CONSTANT을 제거하고 다시 시도하십시오.
임시 변수에 getDistanceBetweenObjects()의 결과를 이동하는 속도를 약간 높일 수 있다면 BTW.

1

수식에 문제가 있습니다. 당신은 중력을 계산하고, 가속도 인 것처럼 적용합니다. 가속은 질량을 힘으로 나눈 값이므로 힘을 작은 물체의 질량으로 나눌 필요가 있습니다. 따라서 GRAV_CONSTANT * ((mass1)/(distBetweenObjects * distBetweenObjects))은 질량 2의 가속 공식입니다.

그런 다음 속도 조절 (가속도 있음)이 아닌 위치 조정 인 것처럼 사용하고 있습니다. 움직이는 질량의 속도를 추적하고,이를 사용하여 위치를 조정하고 가속을 사용하여 속도를 변경합니다.

마지막으로 가속은 실제로 벡터 일 때 스칼라로 사용하고 있습니다. 움직이는 질량에서 고정 된 질량까지의 각도를 계산합니다. 양의 x 축에서 각도로 표현하면 x 가속에 각도의 코사인을 곱하고 y 가속에 각도의 사인을 곱합니다.

이렇게하면 중력을 올바르게 표현할 수 있습니다.

아무 것도 수행되지 않으면 좌표를 확인하여 현재 상황을 확인하십시오. 고정 질량이 효과가있을만큼 충분히 큰지 확인하십시오. 중력은 매우 약한 힘이며 행성 덩어리보다 훨씬 작 으면 큰 효과가 없습니다.

또한 사용중인 장치에 대해 올바른 중력 상수를 사용하고 있는지 확인하십시오. 책에서 찾을 수있는 상수는 미터, 킬로그램, 초의 MKS 시스템 용입니다. 길이 단위로 킬로미터를 사용하는 경우 상수에 백만을 곱하거나 수식에 연결하기 전에 길이를 천 단위로 곱해야합니다.

+0

나를 이길.: ^) 그러나 각도로 변환하는 것을 권장합니다. 분리 벡터에서 직접 가속 벡터를 얻는 것이 더 쉽고 빠릅니다. – DSM

+0

빠른 답장을 보내 주셔서 감사합니다. 트릭을 수행하는 것처럼 들립니다. 내가 집에 갈 때 아프다. – heyred