2010-12-06 4 views
2

현재 Box2D 물리 엔진을 사용하고 있습니다. 모든 몸체가 단일 임의 점에 끌리는 중력 우물을 만들 수 있는지 궁금합니다. 이것을 할 수있는 특정 방법이 있습니까, 아니면 각 신체에 맞춤식 힘을 가해 야합니까? (정적 superdense body를 만들려고 시도했지만 Box2D는 Newton의 Universal Gravitation의 법칙을 적용하지 않았습니다.)Box2D (C++) Gravity Wells

또한 중력 우물을 만드는 방법이 있습니까? 임의의 점을 중심으로 밀도가 높은 구체를 만들 수 있으며이를 달성하기 위해 부력을 사용할 수 있습니까?

답변

4

이 기능은 Box2D에 내장되어 있지 않습니다. 가장 쉬운 방법은 중력 우물과 강체 사이의 각도와 거리를 얻고 그에 따라 몸체 속도를 설정하는 것입니다.

각도를 얻으려면 :

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double angle = atan2(dy, dx); 
// angle is in radians, use atan2(dy, dx)/PI * 180 if 
// you need degrees 

거리를 얻으려면 : 나는 플래시 및 QuickBox2D라고 내가 쓴 라이브러리를 사용하여 간단한 예를 채찍질

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double dist = sqrt(dx * dx + dy * dy); 

. 구문이 C++ Box2D 라이브러리와 매우 다르므로 도움이되지 않을 수도 있지만 기본 원칙은 동일합니다. 또한 완벽한 예는 아니지만 시작될 수도 있습니다.

See The Flash Example

+0

I는 플래시 버전 바이올린과 dir.x currVel.x + = (강도와 Math.cos * (ANG))/(DIST * DIST)에 라인들 (49) + (50)를 변경; dir.y = currVel.y + (강도 * 수학 식 (ang))/(dist * dist); 위의 코드 앞에 분명히 추가했습니다. var dist : Number = dist (big, little); – conradev

+0

강도를 높여야하지만 그 변화는 역 제곱 법칙을 적용합니다. – conradev

+0

맞아요 ... 거리에 따라 강도를 높여야합니다. 도움이 될 수있어서 다행입니다. – Zevan