Физика косого удара мат. точки о неподвижную поверхность

Физика косого удара мат. точки о неподвижную поверхность

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

Да у тебя же АРКАНОЕД. А арканоед решался уже примерно стопядьцот раз, гугли и ищи на этом форуме.

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

Стена имеет упругость?

Если шарик принять за материальную точку, то: Масса до и после столкновения одинаковая, значит она не влияет на вектор. Трение только уменьшает скорость. Упругость определяет сколько у шарика останется энергии после столкновения, т.е. на вектор тоже не влияет.

На вектор будет влиять только боковое ускорение.

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

Стены могут иметь разную упругость, но в данный момент будем рассматривать, что стена не упругая. Если например тело не упругое (или имеет какой-то коэффициент упругости), то можно же как-то пересчитать векторы скорости Vx и Vy, составляющие вектора V. То есть у меня точка имеет скорости Vx и Vy и на отскоке я поворачиваю просто этот вектор на угол отскока. Тогда этот вектор V при разной упругости тела будет меняться по величине и направлению после отскока. Но какая зависимость?

Вот, что сейчас у меня получается, стрелки вправо-влево дают ускорение bounce

v = v - 2 * dot(v, n) v - скорость n - нормаль к поверхности dot - скалярное произведение

Если вводить трение, то задача становится несколько интереснее, хотя так же решается в пролторы строчки.

Прежде чем решать её(да и вообще любую упрощённую задачу), задай себе вопрос - ты уверен, что, написав упрощённое решение для точки, тебе никогда не захочется расширить его до случая, например, окружности? Добавить вращение? Написать решение(пусть даже точное) для задачи, сформулированной восте 0 != написанию решения, которое можно в разумных пределах расширить на более сложные случаи.

LuckyMan > v = v - 2 * dot(v, n) без трения будет v -= (1.0f + bounce) * min(0.0f, dot(v, n)) * n;

>> Прежде чем решать её(да и вообще любую упрощённую задачу), задай себе вопрос - ты уверен, что, написав упрощённое решение для точки, тебе никогда не захочется расширить его до случая, например, окружности?

То есть лучше выбрать точку вхождения в физику геймдева сразу с окружностей и многоугольников? Практическую ценность рассмотрение точек как физ. тел не представляет?

>> v -= (1.0f + bounce) * min(0.0f, dot(v, n)) * n;

расшифруй на словах если не затруднит, для чего, например, 1.0f и что содержит переменная bounce, почему вот здесь min(0.0f, dot(v, n)) не больше 0 получать должны

И если есть хорошие, понятные источники информации по данным вопросам, то можно ссылки, вопросов будет меньше.

kotofei > То есть лучше выбрать точку вхождения в физику геймдева сразу с окружностей и > многоугольников? Практическую ценность рассмотрение точек как физ. тел не > представляет? всё зависит от того, чего ты хочешь добиться в конце концов. если тебе просто нужно написать арканоид, то так и пишешь вопрос(гуглу, разумеется, ты такой не первый): физика арканоида(физику материальной точки легко расширить до случая невращающегося шарика). если хочешь, чтобы в игре была полноценная физика взаимодействия твёрдых тел, берёшь любой готовый двиг вроде box2d. если хочешь потратить несколько месяцев/лет своей жизни на написание своей игровой физики, спроси меня как.

kotofei > расшифруй на словах если не затруднит, для чего, например, 1.0f и что содержи переменная bounce, почему вот здесь min(0.0f, dot(v, n)) не больше 0 получать должны bounce - число 0..1, означающее коэффициент отскока(0 - абсолютно неупругий, 1 - абсолютно упругий удар). формула берётся из того физического факта, что при столкновении со стеной скорость можно разложить на две составляющие - нормальная и тангенциальная(перпендикулярная нормали). тангенциальная составляющая, если трения нет, никак не влияет. нормальная обнуляется в случае нулевого отскока и меняется на противоположенную в случае единичного. min(0, ..) нужен, чтобы ты не посчитал контакт со стенкой, если шарик уже от неё отдаляется(иначе он просто прилипнет).

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

kotofei Насчет упругости уже обяснили, остается трение, оно меняет тангенциальную составляющую скорости по формуле: Vt'=max(0,Vt-DVn*k*Sign(Vt)), где k-коэффициент трения, DVn-изменение нормальной составляющей DVn=(1.0f + bounce)*dot(v, n), Vt - тангенциальная составляющая до удара, Vt' - после удара, Sign() - возвращает знак. Трение всегда работает на уменьшение абсолютной величины Vt (относительно ударяемой поверхности) Если у вас арканоид, то нужно отдельно рассматривать: 1) столкновения мяча с гранью (отрезком) - только если на него попадает проекция центра мяча нормаль = нормаль к отрезку 2) с углом (точкой) нормаль = радиус из центра мяча к точке

📎📎📎📎📎📎📎📎📎📎