Создать импульсный вектор из сенсорного местоположения - PullRequest
0 голосов
/ 18 мая 2011

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

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

, а

b2Vec2(20.0f,100.0f)

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

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

1 Ответ

1 голос
/ 18 мая 2011

Простым решением было бы создать вектор из местоположения шара в месте касания и использовать его масштабированный вариант в качестве вектора импульса.

Редактировать: некоторый псевдокод для вычисления этого вектора

-(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() );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...