Создать вектор импульсов из местоположения касания

#objective-c #cocos2d-iphone

#цель-c #cocos2d-iphone

Вопрос:

представь, что у меня есть мяч. Пользователь прикасается к нему, и мяч взлетает вверх. На данный момент направление импульса является статичным

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

и

 b2Vec2(20.0f,100.0f)
  

является вектором импульса. Я хочу, чтобы вектор импульса генерировался случайным образом. Я думаю, это следует сделать, выбрав место касания мяча.

Этот вопрос больше касается математики. Как я могу вычислить вектор случайного импульса в соответствии с местоположением касания? Есть какие-нибудь идеи?

Комментарии:

1. Если оно случайное, почему оно должно быть связано с местоположением касания?

2. Легко создать псевдослучайный вектор, но он тот же, учитывая тот же вектор, но я думаю, что это просто создает больше работы без выигрыша (человеку почти невозможно коснуться одной и той же точки).

Ответ №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() );
}
  

Комментарии:

1. Это настолько близко к реальному коду, насколько я могу подойти, зная ваш фреймворк не больше, чем я уже знаю из вашего кода.