Как рассчитать вращение, вызванное сильным трением?

15

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

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

Когда мяч попадает в стену, я знаю, что скорость вращения зависит от ...

  • начальная скорость мяча при ударе о поверхность
  • то коэффициенты трения шара и поверхностных (физических констант)
  • угол падения (угол между вектором скорости входящего шара и нормали к поверхности).

Угол падения аппроксимируется точечным произведением векторов скорости удара и выхода шара. (1 означает высокое вращение, -1 означает отсутствие вращения, а все остальное относительно между ними)

Умножив все вышеперечисленное вместе и убедившись, что они затем были преобразованы в диапазон 0 - 1 и умножен на максимальную скорость вращения, мяч, казалось, отреагировал на скорость вращения, как и ожидалось. За исключением одного: он всегда будет вращаться по часовой стрелке (из-за положительных значений).


Это хороший метод? Можете ли вы придумать более простой способ?

Если этот метод выглядит хорошо, что я пропускаю? Как узнать, когда шар должен вращаться против часовой стрелки?

codemonkey
источник

Ответы:

2

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

Однако, если мяч не вращается при ударе, я не могу представить ситуацию, когда он начинает вращаться против направления угла падения. То есть, «по часовой стрелке» или «против часовой стрелки» должно быть относительно той стороны нормали, где угол падения.

Я думаю, что просто умножить результат на исходный вектор направления х (+1, если ехать слева направо, -1, если ехать справа налево).

Изменить: вы можете использовать перекрестный продукт для этого. Incident cross normalобеспечивает вектор только в направлении Z (если мы находимся на плоскости 2D XY). Посмотрите на z-элемент: если он положительный, то при приближении мяча он должен вращаться по часовой стрелке. Если оно отрицательное, шар должен вращаться против часовой стрелки.

Eli
источник
Привет, Эли. Во-первых, я принимаю во внимание оригинальное вращение мяча, просто забыл упомянуть об этом в своем посте. Во-вторых, я не думаю, что система x-direction будет работать. Я пытался это сделать, но если шарик коснется поверхности снизу налево, вектор x будет равен -1, это будет означать вращение против часовой стрелки, в то время как на самом деле он должен вращаться по часовой стрелке
codemonkey
Как вы учитываете оригинальное вращение мяча? Если он вращается очень быстро, он может развернуться в совершенно другом направлении. Проблема с точечным произведением в вашем случае заключается в том, что он использует косинус (четная функция). Вам нужно что-то еще, чтобы установить знак отношений между вашими векторами (случайный и нормальный). Для этой цели вы можете использовать перекрестный продукт (векторный продукт). Я отредактировал свой ответ, чтобы включить метод перекрестного произведения.
Eli
перечитывая ответ после редактирования мне нравится. Пробовал, и это работало вполне нормально. Что касается оригинального вращения, я говорил только о постепенном изменении поворота ... что касается исходного вращения, влияющего на вектор выхода, ну, это мой следующий шаг :)
codemonkey
О, редактирование было одним из 3-х различных решений, которые я предложил, и я объяснил, почему вы должны это сделать (точка только дает величину, а не направление угла). Увы, должен быть более кратким, я думаю.
Кадж
извини за этот кадж, он поскользнулся ... не обиделся намеревался :)
codemonkey
3

Сначала получим касательную к поверхности от нормальной поверхности: t = (ny, -nx)

Тогда вы можете получить компонент скорости вдоль поверхности как vt = v точка t .

Теперь вы можете рассчитать вращение шара: w = | ( normal * r) cross vt |, где r - радиус шара.

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

Danik
источник
Спасибо за ответ Даник. Я уже принимаю во внимание инерцию вращения шара (добавляя его к новому вращению), а также трение поверхности как коэффициент, который нужно умножить на общую скорость вращения. Чем больше трение, тем выше скорость вращения, верно?
codemonkey
2

Хорошо, это может звучать глупо, но вы не используете скалярное произведение вектора шара и нормали поверхности, а просто используете arccos для вычисления угла, а вы? Потому что тогда угол будет положительным , было ли это положительное (до 90 градусов) или отрицательного (так же) , как косинус симметричен вокруг 0.
Если это является случай , то вместо того , чтобы использовать нормали к плоскости, использовать само направление плоскости и вычтите 90 градусов из угла, поэтому от 0 до 180 станет от -90 до +90 градусов (или от -полной Пи до + половины ПИ, если вы наклонены в радиальном направлении).

Кая
источник
Хорошо, рассмотрим этот случай: x + ve прав, y + ive вниз; Вектор поверхности S = ​​(1,0); у нас есть два вектора скорости удара V1 = (3,4), ударяющих сверху, должен вращать шар по часовой стрелке, и V2 = (3, -4), ударяющих снизу, должен вращать шар против часовой стрелки. Теперь нормали для обоих векторов будут (3 / 5,4 / 5) и (3/5, -4 / 5) соответственно. Теперь скалярное произведение для обоих векторов будет 3/5. генерируемый угол был бы arccos (3/5) = 53 градуса для ОБА векторов. Что верно, но на противоположных сторонах! так что, если я буду использовать этот метод, я все равно получу вращение по часовой стрелке. Видишь мою дилемму?
codemonkey
3 возможных решения. 1) Не используйте нормальное, но направление стороны и вычтите 90 градусов, как упомянуто выше. 2) Имитируйте то же самое, меняя местами x и y нормального и инвертируя (умножьте на -1). 3) Умножьте угол на знак перекрестного произведения двух векторов, так как перекрестный продукт представляет собой грех угла, который не симметричен около 0 градусов.
Кадж
Точечный продукт не дает вам угол, только величину угла, вам также нужно направление угла. Все 3 способа выше симулируют, используя синус, дающий вам сторону. Вы также можете использовать базовый триггер, чтобы получить угол. Грех (альфа) = длина противоположной стороны / длина наклонной стороны (на основе треугольника с одним углом 90 градусов между противоположной стороной и наклонной стороной). Это и Пифагор для расчета длины сторон будет делать.
Кадж
Кстати, перечитайте мой первоначальный ответ, поскольку он решает дилемму, беря угол с плоскостью вместо нормального и вычитая 90 градусов.
Кадж
0

Первое, на что нужно обратить внимание - это скорость вращения или вращение, прежде чем ударить по стене; скажем Si; больше, равно или меньше значения, необходимого для поддержания того же вращения после удара, скажем, Ss. При этом вы можете получить фактическое значение после удара, скажем Se, используя значение трения между шариком и поверхностью

Получите компонент скорости через прыгающую поверхность Vxi = Vi точка Vx, будучи Vx параллельным вектором к поверхности с величиной 1.

Значение, которое вы ищете: Ss = Vxi / r, чтобы преобразовать Vxi в угловую скорость. Если Si ниже, чем Ss, шар должен получить положительное вращение. Если Si равен Ss, шар должен сохранять примерно одинаковое вращение, об этом позже. Если Si больше, чем Ss, шар должен потерять вращение

потери и прирост скорости зависят от величины трения Fr. На самом деле это Крест между радиусом и силой трения, но вы можете установить это значение по своему желанию.

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

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

Aprah
источник