Нужна помощь при столкновении и повороте круга? - Игровая физика
Итак, у меня есть куча мячей:
![Ignight Balls]()
То, что я пытаюсь понять, - это сделать следующие круги:
-
Повернуть на основе поверхностей, которые они касаются
-
Исправить проникновение столкновения при работе с несколькими касающимися объектами.
EDIT: Это то, что я имею в виду под ротация
![alt text]()
-
Бал 0 будет вращаться против часовой стрелки, поскольку он опирается на Ball 3
-
Ball 5 будет вращаться по часовой стрелке, поскольку он опирается на Ball 0
Несмотря на то, что решения для этого универсальны, только для записи я использую Javascript и SVG, и предпочел бы реализовать это сам, а не использовать библиотеку.
Помощь будет очень оценена. Благодарю!:)
Ответы
Ответ 1
Вот несколько ссылок, которые, я думаю, помогут вам в ваших поисках:
Box2D
Продвинутая физика персонажей
Javascript Ball Simulation
Box2D имеет то, что вы ищете, и его открытый исходный код, я считаю. Вы можете скачать файлы и посмотреть, как они делают то, что делают, чтобы добиться вашего эффекта.
Дайте мне знать, если это поможет, пытаясь лучше ответить на вопросы здесь. :)
РЕДАКТИРОВАТЬ:
Так что я пошел дальше и подумал об этом чуть больше, чтобы дать некоторое представление о том, как я буду подходить к этому. Посмотрите на изображение ниже:
В принципе, сравните углы на сетке, если шар падает на +30 градусов по сравнению с шаром, на который он падает, затем поверните шар в положительном направлении. Если его падение -30 градусов по сравнению с мячом, на который он падает, поверните шар отрицательно. Я не говорю, что это правильное решение, но просто думаю об этом, так я бы подошел к проблеме с нуля.
![alt text]()
Ответ 2
С физической точки зрения кажется, что вы хотите сохранить как линейные, так и angular momentum.
В качестве отправной точки вы хотите установить ODE матрицы, которые моделируют оба, а затем выполняют некоторую линейную алгебру для их решения. Я лично использовал бы Numpy/Scipy (возможно, используя разреженный массив) для этого решения. Но есть много подходов (sympy приходит на ум). Какие модули вы хотите использовать?
Вам нужно ознакомиться с коэффициентом реституции и коэффициент трения и решить, хотите ли вы также сохранить кинетическую энергию. (вы хотите/ухаживаете, если они продолжают прыгать и катиться навсегда?) (вам, вероятно, понадобятся и энергетические матрицы)
Вы будете решать эти матрицы каждый раз, проверяя условие отсутствия двух шаровых центров, чем сумма двух радиусов. (... и если они это сделают, вы корректируете импульс и энергетические условия для условия после столкновения)
Это просто самый простой из начинаний для большого проекта. Могу ли я спросить, почему вы хотите сделать это с нуля?
Ответ 3
Я бы порекомендовал проверять книги и статьи по физике физики. См. O'Reilly Физика для разработчиков игр и Gamasutra, например.