1

これは純粋な物理的な質問ですが、なぜうまくいかないのかわかりません....私は動いている物体を持っています.私はvcos(シータ)とvsin(シータ)の値を取得します...これから計算します動きの速度と角度.....また、別のポイント(x、y)を知っていて、オブジェクトをこのポイントに向けたいと思います。特定の力(力にはX軸とY軸の値が必要です)を適用する必要があると思いますオブジェクトをポイントに向けます....必要な力の量を取得するには、次の式に従います。

fX=V2cos(θ2)-V1cos(θ1) fY=V2sin(θ2)-V1sin(θ1)

シンテックスが以下に与えられたものに関係なく(私はそれらの人々が目的cを知っているためにそれを与えます........私の方程式は機能しません....誰か助けてくれますか...

    if (acceleration.x>1.5 || acceleration.y>1.5) {

            shakeCounter++;
            [_label setString:[NSString stringWithFormat:@"%d",shakeCounter]];  


        //get the velocity of moving object.......................  
        b2Vec2 mVelik = ballBody->GetLinearVelocityFromLocalPoint(localPoint);


        float angleOfCurrentDirectionOfMotion;
        float angleOfDesiredDirectionOfMotion;
         //calculate first velocity
        float V1=sqrt(pow(mVelik.x, 2)+pow(mVelik.y, 2));
        //calculate second velocity
        float V2=V1+factor;
        //calculate current  angle
        angleOfCurrentDirectionOfMotion=atan(mVelik.y/mVelik.x);
         //calculate desired angle
        angleOfDesiredDirectionOfMotion=atan(acceleration.y/acceleration.x);
///calculate FX and FY
        float X=V2*cos(angleOfDesiredDirectionOfMotion)-V1*cos(angleOfCurrentDirectionOfMotion);
        float Y=V2*sin(angleOfDesiredDirectionOfMotion)-V1*sin(angleOfCurrentDirectionOfMotion);

        b2Vec2 force = b2Vec2(X,Y);

 ///apply Force to change direction....   
        ballBody->ApplyForce(force, ballBody->GetPosition());

}
4

1 に答える 1

1

実験する box2d はありませんが、正常に動作すると仮定します。

オブジェクトの質量を無視することはできません。質量が大きいほど、力の影響は小さくなります。

X と Y の計算は正しいようです (複雑すぎますが)。重心に衝撃を加えて動きを変えることができます::

b2Vec2 impulse = b2Vec2(X,Y) * ballBody->GetMass() ;
ballBody->ApplyLinearImpulse(impulse, ballBody->GetLocalCenter());

衝動ではなく力を本当に使いたい場合は、さまざまな解決策があります。一般に、最初に力の大きさを選択してから方向を計算するか、またはその逆を行うことができます。方程式 (およびおそらくコード) を提供することはできますが、基本的な物理学を理解していないと意味がありません。

編集:
1 次元の運動方程式は x = x 0 + V 0 t + at 2 /2 なので、WLOGはターゲット ポイントの方向にx = 1 を想定し、時間 (ボールの x は、ターゲット ポイントの x に等しくなります)。次に、その時間を y の方程式に入れ、 a yを解けば完了です。

于 2010-08-03T12:59:39.320 に答える