2010-01-24 2 views
15

Ok поэтому у меня есть куча шаров:Нужна помощь при столкновении и повороте круга? - Игра Физика

Ignight Balls


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

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

  • Fix столкновения проникновения при работе с несколько касаясь объектов.


EDIT: Это то, что я имею в виду вращения

alt text

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

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


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

Помощь была бы очень признательна. Благодаря! :)

+0

Я не уверен, я понимаю, что вы имеете в виду первый пункт пули. Можете ли вы уточнить? – duffymo

+1

Если мяч 0 падает и попадает в мяч 3, он вращается против часовой стрелки, я думаю, что это он. – Harmen

+0

Да точно, или если мяч опирается на другой шар, он будет вращаться сбоку. – RadiantHex

ответ

6

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

Box2D

Advanced Character Physics

Javascript Ball Simulation

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

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

EDIT:

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

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

alt text http://img686.imageshack.us/img686/9256/angles.jpg

6

С физической точки зрения кажется, что вы хотите сохранить как линейные, так и угловые momentum.

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

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

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

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

+0

Hi bpowah. Благодарю. Я уже реализовал часть того, что вы упомянули. Но я застрял с фиксацией координат obj во время проникновения, когда несколько объектов касаются друг друга. И не иметь понятия, как заставить objs вращаться «концептуально». – RadiantHex

+0

Я не уверен, что точно знаю, что вы подразумеваете под «фиксацией obj-коордов во время проникновения». Можно ли предположить, что вы можете разрешить местоположение каждого шара в конце временного периода, сохраняя при этом сохранение всех импульсных условий? Если да, то как вы отличаетесь от того, что хотите? – Paul

+0

Он проворно означает, что после заданной отметки времени количество шаров может взаимопроникнуть, и у него есть трудные времена, разрешающие его. Я не занимаюсь физикой/игровым полем уже около двух лет, но я помню, что это относительно легко разрешимо, используя термин, релаксацию. В основном в конце каждого шага вы нажимаете каждую пару отдельно друг от друга и выполняете итерацию на фиксированное количество шагов или до тех пор, пока взаимопроцессоры не станут меньше, чем некоторые из них. Но я мог бы забыть некоторые «причуды» здесь. –

Смежные вопросы