1

这是一个纯粹的物理问题,但我不知道为什么它不起作用....我有一个移动的物体。我得到了 vcos(theta) 和 vsin(theta) 的值...从这个我计算速度和运动角度.....我也知道另一个点(x,y)并想将物体引导到这一点。我想我需要施加一定的力(力必须具有 X 和 Y 轴值)到将物体指向该点……所以要获得所需的力,我只需遵循以下公式:

fX=V2cos(theta2)-V1cos(theta1) fY=V2sin(theta2)-V1sin(theta1)

无论下面给出什么语法(我给那些知道目标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());

如果你真的想使用力量而不是冲动,有很多解决方案。一般来说,你可以先选择力的大小,然后再计算方向,或者反过来。我可以给你方程式(也许还有代码),但如果不了解基础物理学,它就没有任何意义。

编辑:
好的,一维运动方程是 x = x 0 + V 0 t + at 2 /2,所以 WLOG 在目标点的方向上假设x = 1,并求解时间(当球的 x 将等于目标点的 x)。然后将时间代入 y 方程并求解y,就完成了。

于 2010-08-03T12:59:39.320 回答