Расчет результата векторов прыгающих кругов / шариков - PullRequest
3 голосов
/ 20 января 2012

Я изо всех сил пытался получить правильные значения вектора на основе 2 прыгающих кругов / шаров. Я знаю, когда они подпрыгивают; используя Пифагора, но тогда я потерялся. Я знаю, что мне, вероятно, придется использовать тригонометрию cos / sin / tan2.

Ситуация, объясненная на моем изображении изображение http://www.microshift.net/help!.png

Нашел пару примеров в Интернете, но даже с такими я не могу разобраться!

Провел 2 HTML5 эксперимента над здесь .

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

Не могли бы вы привести пример расчета на основе известных переменных?

1 Ответ

3 голосов
/ 22 января 2012

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

Это основы, тогда вы можете справиться с различными вариациями следующими способами:

если оба объекта движутся во время удара :
Чтобы справиться со случаем, когда оба объекта движутся, проще всего преобразовать их в систему отсчета, где один неподвижен, а затем снова вернуться. Таким образом, вычтите векторную скорость объекта № 2 из обоих объектов № 1 и № 2 (давая нулевой скорости объекта № 2), выполните вычисление, а затем добавьте эту же векторную скорость к обоим объектам. Конечно, вы могли бы записать полное уравнение для этого, но проще просто преобразовать и преобразовать обратно.

чехол для одного объекта, зафиксированного на всем протяжении :
Если вы хотите удерживать один из объектов неподвижным, вы просто используете угол падения , равный угол отражения , то есть найдите касательную плоскость (3D) или линию (2D) в время удара (это будет просто линия или плоскость, перпендикулярная линии между центрами, которая также будет включать точку контакта) и отскок объекта от этой плоскости / линии. (Вы можете видеть в уравнениях, что это в основном тот случай, когда один объект имеет бесконечную массу, и иногда проще просто сделать это таким образом, если, скажем, вы уже написали это для обоих объектов, которые могут свободно перемещаться.)

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

...