想象我有一个球。用户触摸它并且球上升。目前,脉冲方向是静态的
ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter());
和
b2Vec2(20.0f,100.0f)
是脉冲矢量。我想要随机生成一个脉冲向量。我认为这应该通过在球上选择触摸位置来完成。
这个问题更多的是关于数学。如何根据触摸位置计算随机脉冲矢量?有什么想法吗?
答案 0 :(得分:1)
简单的解决方案是创建一个从球的位置到触摸位置的矢量,并使用它的缩放版本作为你的脉冲矢量。
编辑: 一些伪代码来计算这个向量
-(void) createImpulse(Vector touchPoint)
{
//this is now a vector pointing from the touch point to the ball
Vector diff = [ball->GetWorldCenter() vectorSubtract:touchPoint];
//Generate a random float from 1/2 to 2
float scale = randFloat(0.5f, 2.0f);
//Scale the vector by the float
Vector impulse = [diff scaleBy:scale];
ball->ApplyLinearImpulse(b2Vec2(impulse.x, impulse.y), ball->GetWorldCenter() );
}