Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Столкновение игры в бильярд

Автор вопроса: CrazyHorseОтветов: 1

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

Для каждого мяча у меня есть прямоугольник pygame, что означает центр мяча, диаметр и положение мяча в игре. А также вектор скорости (u_x, u_y).

На данный момент я проверяю столкновение с помощью colliderect, но могу изменить его, измеряя расстояние между центральными шарами.

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

Кто-нибудь может мне помочь в формуле для новых скоростей мяча после столкновения с учетом положения мяча в момент удара. Большое спасибо!

  • stackoverflow.com/questions/8429315/ < / а> Bart 27.02.2012
  • @bart, спасибо, но я не понимаю dot и boundary_normal. Вам легко написать формулу Python по этой ссылке? CrazyHorse 27.02.2012
  • dot относится к точечному произведению, а boundary_normal - нормальный вектор в точке удара. Bart 27.02.2012
  • ой! отлично. Я знаю, как вычислить скалярное произведение, но как взять вектор нормали из моих данных? Спасибо за помощь, Барт. CrazyHorse 27.02.2012
  • барт, классический круглый бильярдный шар. У вас есть центр (x, y) и диаметр (d) для обоих мячей. CrazyHorse 27.02.2012
  • На самом деле, здесь раздел столкновений может вам помочь. -шаровое столкновение. Bart 27.02.2012

pygamecollision-detection

Ответы

Ответ 1 · рейтинг 1 · ninMonkey

Модуль euclid поможет. Он содержит векторный класс, который имеет normal (), dot () и т.д. net / euclid.html (Вы можете скопировать модуль в папку своего проекта, не устанавливая его.)

Для формул проверьте: https://gamedev.stackexchange.com/a/7901/6776 или http://archive.ncsa.illinois.edu/Classes/MATH198/townsend/math.html#COLLISION

Примечание: чем сложнее становится ваша физика, тем больше вам нужно использовать физический движок, такой как [введите описание ссылки здесь] [pymunk] или ODE. Но это хороший опыт обучения.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы