Нужна помощь в столкновении и вращении круга - Физика игр - PullRequest
15 голосов
/ 24 января 2010

Хорошо, у меня есть куча шаров:

Ignight Balls


Я пытаюсь понять, как сделать эти круги:

  • Поворот в зависимости от поверхностей, к которым они соприкасаются

  • Исправлено проникновение при столкновении при работе с несколькими касающимися объектами.


РЕДАКТИРОВАТЬ: Это то, что я имею в виду под вращение

alt text

  • Шар 0 будет вращаться против часовой стрелки , поскольку он опирается на шар 3

  • Шар 5 будет вращаться по часовой стрелке , поскольку он опирается на шар 0


Несмотря на то, что решения для этого универсальны, просто для записи я использую Javascript и SVG и предпочел бы реализовать это сам, а не использовать библиотеку.

Помощь была бы очень признательна. Спасибо! :)

Ответы [ 3 ]

6 голосов
/ 29 января 2010

Вот несколько ссылок, которые, я думаю, помогут вам в вашем квесте:

Box2D

Физика продвинутых персонажей

Javascript Ball Simulation

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

Дайте мне знать, если это поможет, пытаясь лучше ответить на вопросы здесь. :)

EDIT:

Так что я пошел дальше и подумал об этом еще немного, чтобы дать некоторое представление о том, как я подхожу к этому. Посмотрите на изображение ниже:

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

alt text

6 голосов
/ 24 января 2010

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

В качестве отправной точки вам необходимо установить ODE матрицы, которые моделируют обе модели, а затем выполнить некоторую линейную алгебру для их решения. Лично я бы использовал Numpy / Scipy (возможно, с разреженным массивом) для этого решения. Но есть много подходов (симпатия приходит на ум). Какие модули вы хотите использовать?

Вы захотите ознакомиться с коэффициентом восстановления и коэффициентом трения и решить, хотите ли вы также сохранить кинетическую энергию. (хотите / заботитесь, чтобы они продолжали подпрыгивать и кататься вечно?) (вам, вероятно, понадобятся и энергетические матрицы)

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

Это только самое начало большого проекта. Могу я спросить, почему вы хотите сделать это с нуля?

3 голосов
/ 24 января 2010

Я бы порекомендовал проверить книги и статьи по симуляции игровой физики. См. Например, Физика для разработчиков игр О'Рейли * и веб-сайт Гамасутра .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...