2011-09-21 3 views
0

공기가 부는 공이 있습니다. 공이 송풍기 가까이에 있으면 공을 더 날려서 송풍기에서 멀어지면 공을 덜 내야합니다. 내가 box2d 사용하고 impulse 함수를 사용하고 있습니다. "body-> ApplyLinearImpulse (force, body-> GetPosition())". 나는 이것을 달성 할 수식이나 방법을 찾을 수없는 것 같습니다. 공을 300 픽셀 오른쪽으로 날려 버리려면 어떻게해야합니까? 도와주세요.box2d의 충동은 얼마나 많은 픽셀입니까

+1

제 편집 참조하시기 바랍니다 – Andrew

답변

0

나는 박스 2d 전문가가 아니지만 실제로는 보이지 않는 작은 상자를 만들고 공이 상자에 부딪치게합니다. 송풍기가 더 불면 상자 안의 속도가 더 빨라집니다. 반대 방향. 지금까지 300 픽셀 길이에 관한 한 당신은 볼이 물리적 세계에

300/<your_rendering_window_to_physics_world_ratio> 

간다 있도록 힘과 속도를 조정해야합니다.

1

시뮬레이션 전에 거리를 계산하려면 box2d 소스를 살펴 봐야합니다. 신체의 속도를 시뮬레이션 할 때 중력, 추가 힘, 선형 댐핑, 각진 댐핑 및 아마도 더 많은 것에 따라 수정됩니다. 또한 속도는 속도 반복에 의존합니다.

그러나 나는 정말 부드러운 동작을 원한다면 (충격에서와 같이) 충동 대신 applyForce 함수를 사용하는 것이 좋습니다. 그러나 각 시뮬레이션 단계마다 힘을 적용해야합니다.

편집 : 빠 = -k * V의 *의 V :

은 또한이 같은 공기 저항을 시뮬레이션 할 수 있습니다. 나는이 방법으로 파이프에서 움직임을 시뮬레이션했습니다. 잘됐다.

그래서 각 단계는이 같은 것을 만들 수 있습니다

BlowForce = k1/distance; // k1 - coefficient 
Resistance = -k2 * V * V; //k2 - another coefficient 
TotalForce = BlowForce + Resistance; 
body->ApplyForce(TotalForce); 
-1

힘 = 질량 * 가속도를, 그래서 당신은 당신의 몸을 설정 질량을 원하는 가속도를 계산 (PTM_RATIO에 의해 300 픽셀을 분할하는 기억) 두 개를 함께 곱하십시오.

+0

입니다. 몸에 일정한 가속도가 있으면 멈추지 않습니다. 속도는 v = a * t로 변경됩니다. 예를 들어 중력 가속도 = 9.8입니다. – Andrew