Исходя из моего предыдущего вопроса : у меня мяч вполне реально отскакивает от поверхностей, в которые он попадает. Теперь я хотел бы заставить его вращаться от трения удара .
Показать это достаточно просто: я поворачиваю шар на его угловую скорость каждый тик и применяю то же вращение, когда он отображается.
Когда мяч попадает в стену, я знаю, что скорость вращения зависит от ...
- начальная скорость мяча при ударе о поверхность
- то коэффициенты трения шара и поверхностных (физических констант)
- угол падения (угол между вектором скорости входящего шара и нормали к поверхности).
Угол падения аппроксимируется точечным произведением векторов скорости удара и выхода шара. (1 означает высокое вращение, -1 означает отсутствие вращения, а все остальное относительно между ними)
Умножив все вышеперечисленное вместе и убедившись, что они затем были преобразованы в диапазон 0 - 1 и умножен на максимальную скорость вращения, мяч, казалось, отреагировал на скорость вращения, как и ожидалось. За исключением одного: он всегда будет вращаться по часовой стрелке (из-за положительных значений).
Это хороший метод? Можете ли вы придумать более простой способ?
Если этот метод выглядит хорошо, что я пропускаю? Как узнать, когда шар должен вращаться против часовой стрелки?
источник
Сначала получим касательную к поверхности от нормальной поверхности: t = (ny, -nx)
Тогда вы можете получить компонент скорости вдоль поверхности как vt = v точка t .
Теперь вы можете рассчитать вращение шара: w = | ( normal * r) cross vt |, где r - радиус шара.
Здесь я предполагаю, что шар не имеет вращательной инерции и начинает вращаться мгновенно со скоростью, которая была бы, если бы он катился по поверхности. Вы можете использовать коэффициент трения, чтобы сделать его более реалистичным и, если хотите, учесть инерцию вращения мяча.
источник
Хорошо, это может звучать глупо, но вы не используете скалярное произведение вектора шара и нормали поверхности, а просто используете arccos для вычисления угла, а вы? Потому что тогда угол будет положительным , было ли это положительное (до 90 градусов) или отрицательного (так же) , как косинус симметричен вокруг 0.
Если это является случай , то вместо того , чтобы использовать нормали к плоскости, использовать само направление плоскости и вычтите 90 градусов из угла, поэтому от 0 до 180 станет от -90 до +90 градусов (или от -полной Пи до + половины ПИ, если вы наклонены в радиальном направлении).
источник
Первое, на что нужно обратить внимание - это скорость вращения или вращение, прежде чем ударить по стене; скажем Si; больше, равно или меньше значения, необходимого для поддержания того же вращения после удара, скажем, Ss. При этом вы можете получить фактическое значение после удара, скажем Se, используя значение трения между шариком и поверхностью
Получите компонент скорости через прыгающую поверхность Vxi = Vi точка Vx, будучи Vx параллельным вектором к поверхности с величиной 1.
Значение, которое вы ищете: Ss = Vxi / r, чтобы преобразовать Vxi в угловую скорость. Если Si ниже, чем Ss, шар должен получить положительное вращение. Если Si равен Ss, шар должен сохранять примерно одинаковое вращение, об этом позже. Если Si больше, чем Ss, шар должен потерять вращение
потери и прирост скорости зависят от величины трения Fr. На самом деле это Крест между радиусом и силой трения, но вы можете установить это значение по своему желанию.
Вы также должны заметить, что, кроме отскока, шар теряет некоторую энергию из-за трения между шаром и поверхностью, таким образом, Vxi подвергается отрицательному воздействию. Я бы сказал, что рикошет влияет на Vy, а трение влияет на Vx.
Вы должны принять во внимание деформацию мяча. Это повлияет на время или рамки прилипания мяча к стене, поэтому пищевая сила будет дольше воздействовать на вращение и скорость выхода. Эта деформация зависит от того, как вы хотите, чтобы ваша модель была.
источник