Objective c 从触摸位置创建脉冲向量

Objective c 从触摸位置创建脉冲向量,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,想象我有一个球。用户触摸它,球就会上升。目前,脉冲方向是静态的 ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter()); 及 是脉冲向量。我想要一个随机产生的脉冲向量。我认为这应该通过选择触球位置来实现 这个问题更多的是关于数学的。如何根据触摸位置计算随机脉冲向量?有什么想法吗?简单的解决方案是创建一个从球的位置到触球位置的向量,并使用该向量的缩放版本作为您的脉冲向量 编辑: 一些伪代码来计算这个向

想象我有一个球。用户触摸它,球就会上升。目前,脉冲方向是静态的

ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter());

是脉冲向量。我想要一个随机产生的脉冲向量。我认为这应该通过选择触球位置来实现


这个问题更多的是关于数学的。如何根据触摸位置计算随机脉冲向量?有什么想法吗?

简单的解决方案是创建一个从球的位置到触球位置的向量,并使用该向量的缩放版本作为您的脉冲向量

编辑: 一些伪代码来计算这个向量

-(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() );
}

如果是随机的,为什么它需要与触摸位置相关?很容易创建一个伪随机向量,但是给定一个相同的向量,它是相同的,但我认为它只是创建了更多的工作而没有任何收益(对于人来说,几乎不可能触摸到完全相同的点)。这与我能得到的真实代码差不多,不知道你的框架比我已经从你的代码。
-(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() );
}