这是一个纯粹的物理问题,但我不知道为什么它不起作用....我有一个移动的对象。我得到vcos(theta)和vsin(theta)的价值......从这里我计算速度和运动角度.....我也知道另一个点(x,y)并想要将物体指向这一点。我想我需要施加一定的力(力必须有X和Y轴)价值)将物体引向点......所以要获得我所需要的力量 公式:
FX = V2cos(theta2)-V1cos(theta1) FY = V2sin(theta2)-V1sin(theta1)
无论下面给出了什么类似的syntex(我为那些知道目标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());
}
答案 0 :(得分:1)
我没有盒子来试验,但我认为它可以正常工作。
你不能忽视物体的质量;质量越大,力的影响越小。
您对X和Y的计算似乎是正确的(尽管过于复杂)。您可以使用脉冲应用于质心 ::
来更改运动b2Vec2 impulse = b2Vec2(X,Y) * ballBody->GetMass() ;
ballBody->ApplyLinearImpulse(impulse, ballBody->GetLocalCenter());
如果你真的想要使用武力而不是冲动,那么就有一系列解决方案。通常,您可以先选择力的大小,然后计算方向,或者相反。我可以给你方程式(也许是代码),但如果不理解基础物理学就没有任何意义。
修改:
好吧,一维运动的方程式是
x = x 0 + V 0 t + 2 / 2,因此WLOG假设 x = 1 in目标点的方向,并求解时间(球的x将等于目标点的x的时间)。然后将该时间放入y的等式中并求解 y ,然后就完成了。