Box2Dの空気抵抗について
くらげ  2016/11/16(Wed) 21:11
Box2Dで簡単な落下体のシミュレーションをしようと思ったのですが、落下体がすぐに終端速度に達してしまいます。
初めの一瞬は等加速度運動するのですが、空気抵抗のせいかすぐに加速しなくなります。
自分が望む動作は永遠に加速する落下運動なので、空気抵抗を0にする方法を教えていただきたいです。


#include <Siv3D.hpp>
#include <HamFramework.hpp>


void Main()
{
Window::Resize(1000, 600); //ウィンドウサイズ設定
const Vec2 gravity(0, 20); //重力
const Vec2 centerPos(500, 0); //落下体の初期座標
const double r = 20; //落下体の半径
PhysicsWorld world(gravity);
PhysicsBody object(world, centerPos, PhysicsBodyType::Dynamic); //落下体
object.addCircle(r);

while (System::Update())
{
world.update();
object.draw();
}
}



記事編集
Reputeless  2016/11/16(Wed) 22:17
これは空気抵抗ではなく、浮動小数点数の精度の理由で Box2D が設けている linear velocity の上限 120.0f に達したのが原因です。
次のように gravity や r のスケールを小さくすれば、より長い実行時間、加速し続けられます。

const Vec2 gravity(0, 0.2);//重力
const double r = 0.2; //落下体の半径

Box2D はある程度制限された数値の範囲でシミュレーションを行うことを想定して設計されています。
半永久的に加速するようなシミュレーションを行うには、独自の実装が必要です。
編集
くらげ  2016/11/18(Fri) 15:26
回答ありがとうございます。
編集
件名
Re: Box2Dの空気抵抗について
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -