Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2

Параметры объекта "сила"

05.10.2025, 20:29. Показов 3302. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Действие происходит в "мире физики" движка. Расчеты выполняются для шага симуляции dt, дефаулт 1/60 секунды. Это совсем не "бесконечно мало", но вполне достаточно чтобы делать удобные предположения/упрощения типа "меняется линейно" не связываясь с "дифурами" и др гадостью.

Есть 3D объект, на каждом шаге симуляции мы можем приложить к нему силу, она сообщит объекту ускорение, и скорость объекта изменится. Формулы в рамках 8-го класса (правда в векторах)

F = m * a;
v += a * dt;

И даже проще, масса конкретного объекта константа, ее можно считать = 1 чтобы не путалась под ногами. Итак, первый параметр объекта "сила" Acceleration (ускорение). Какие еще параметры нужны? Ну ясно что бесконечно расти скорость не может, нужен предел Speed Max. А (по аналогии) Speed Min? Думаю тоже есть смысл, напр человек (объект) стоял и пошел. Вы замечаете какую-то "фазу разгона" когда скорость нарастает? Я нет (вот если стоял и побежал, тогда может быть). Итак, перед тем как скормить движку силу, проверяем, может скорость уже макс и прилагать силу уже не нужно.

Хорошо, и вот первая "элементарная" (любимое слово лохов) задачка: как изменить направление движения? Напр двигался объект по оси X а потом повернулся на 90 и движется вдоль Y? Просто изменить вектор силы/ускорения очевидно недостаточно, получим движение "по диагонали", компонента X скорости сама по себе не иссякнет.
Ага, так он не знает основ физики! Нужно добавить силу трения, она погасит скорость по X!
Да, в движке можно задать трение, но использовать его для поворота, мягко скажем, затруднительно. Обычно радиус поворота слишком велик, а вот скорость резко уменьшается, причем "везде", и там где поворот не нужен. Формулируем
Какой параметр должен управлять "крутизной поворота"? Как его задать и что/как он должен делать?
По опыту предыдущих обсуждений. Попытки привлечь "больше физики" (или более фундаментальной) ничего не дают. Попытки привлечь "дифуры" - тем более. Думается школьной физики здесь вполне достаточно, это скорее задача ТАУ.

Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2025, 20:29
Ответы с готовыми решениями:

Сила (по Ньюьону и без)
Здравствуйте Есть 3D объекты имеющие массу. Есть движок физики, которому я могу сообщать "силы"...

Как отличить часть объекта от собственности объекта?
Здравствуйте! Вопрос на стыке русского языка и программирования. Возможно ли сделать программу,...

Получить необходимый объект по параметру
Приветствую. Пишу прогу для формирования шильдиков(бирок) для сигнальных модулей сиеменса. Задача...

78
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
19.12.2025, 17:12  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Давайте будем считать, что движок, реализующий динамику (уравнения движения, гравитацию, трение и т.п.), уже реализована.
Я так понял, уже используется Bullet (не знаком с таким).
Да, так и есть. Необязательно, но можно глянуть доку/демо Bullet.
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Получается, наша задача — определять «нашу силу» (мощность работающего двигателя, реактивную тягу негодующего колобка и т.п.), чтобы при движении по реализованным движком законам объект (ракета, колобок) попали туда, куда надо, или по нужно траектории.
Да, мы хотим простую вещь: колобок имеет свой двигатель/мотор и едет куда ему/юзеру надо. Это согласуется с житейским здравым смыслом и никаким законам физики не противоречит. И не отменяет эти законы, гравитация действует и на объект с двигателем.
Цитата Сообщение от Mysterious Light Посмотреть сообщение
При движении (под действием нашей силы) объект будет корректно взаимодействовать с др силами и объектами сцены, потому что этими вопросами занимается выбранный движок
Да, так считать можно и нужно. Собсно он этим и занимается, коллизии считаются в обеих анимациях, колобок не проникает сквозь неровную поверхность. Если колобок подпрыгнул - сила гравитации возвращает его на землю (должна). Вот с этим у нас проблемы: прямолинейно вычитая вектор текущей скорости (а др способа гасить инерцию не видно), мы не даем гравитации развить скорость "вниз", в итоге анимация (вторая) сразу же выглядит сомнительно
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Что-то я не понял. Допустим, у нас есть статичная поверхность, где-то на ней лежит колобок. Что мы от колобка хотим? Чтобы он начал катиться и докатился до определённого другого места? Хотим, чтобы он по определённой трассе (с допусками по ширине) прокатился? Что мы хотим?
Правильно хотим. Напр катился по тропинке (которая может как-то петляет), запрыгнул на пенек, побазарил с лисой, погнал дальше. Наша цель сделать инструмент (объект сила) который позволяет юзеру легко и удобно получать такие анимации. Принципиально задача проста - нужно уметь задавать вектор силы, напр явно, точкой назначения, примерным путем и.т.п. Вектор может меняться во времени
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Если точка назначения недостижима (например, находится под поверхностью), что должен колобок сделать, повеситься от безысходности?
Нужно предложить лучшее решение при создавшихся обстоятельствах. В сцене мы работаем с объектами имеющими объем. Объект имеет точку центра (часто ее называют pivot), она часто (но необязательно) совпадает с центром тяжести. Обычно юзеру трудно точно задать конечную позицию где должен находиться центр колобка. А вот отметить точку на пеньке/поверхности - без проблем. Да и особая точность тут обычно не нужна. Конечно внутрь пенька колобок не полезет. Вообще что делать после достижения цели - неясно, мысли тут будут кстати
Цитата Сообщение от Mysterious Light Посмотреть сообщение
А ещё я предлагаю сначала поставить и решить задачу в 2D. Это проще сделать и проще обсуждать.
Не вижу каких-то выигрышей/упрощений (почему не решать в векторах), но как Вам удобнее
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
19.12.2025, 20:36
Кажется, у меня сошлось и задача понятна.

Цитата Сообщение от Igor3D Посмотреть сообщение
прямолинейно вычитая вектор текущей скорости (а др способа гасить инерцию не видно), мы не даем гравитации развить скорость "вниз", в итоге анимация (вторая) сразу же выглядит сомнительно
Так и должно быть, если «его сила» (которой он управляет) постоянно ненулевая — это как бы у него джетпак за спиной.
Если же он «подпрыгивает», то ненулевая «его сила» может быть только вблизи поверхности.

Кстати, если мы говорим об обычном колобке, то тут мне видятся два правдоподобных варианта:
1. колобок непрерывно направляет силу вдоль поверхности и вследствие этого катится по ней к цели. Если колобок совсем не отрывается от поверхности, то метод решения задачи можно брать с сайта, адаптируя его под неровную поверхность в 3D.
2. колобок направляет кратковременную силу под углом к поверхности и вследствие этого прыгает. В краткосрочный интервал приземления он должен скорректировать следующий прыжок (особенно интересен случай, когда колобок пропёкся и потому удар упругий без гашения инерции).
Может быть, если ещё варианты, но я их пока не вижу. Причём эти два варианта можно сочетать друг с другом, но не одновременно, а чередуя режимы (подкатился — запрыгнул — покатился дальше).

Цитата Сообщение от Igor3D Посмотреть сообщение
Принципиально задача проста - нужно уметь задавать вектор силы, напр явно, точкой назначения, примерным путем и.т.п.
В общих очертаниях идея действительно проста. В реализации — нет.
Во-первых, нужно выделить какие-то конкретные типы «маркеров движения» (одна точка назначения, кривая пути и т.п.).
Во-вторых, (и это НЕ стоит здесь обсуждать) надо бы сделать их «семантическими маркерами пути», чтобы пользователь мог их интерпретировать в контексте его прикладной задачи.
В-третьих, это надо реализовать в виде графического редактора (не в JSON же эти маркеры будут специфицироваться).

Цитата Сообщение от Igor3D Посмотреть сообщение
Не вижу каких-то выигрышей/упрощений (почему не решать в векторах), но как Вам удобнее
Почему же не решать в векторах? Однозначно решаем в векторах! Только размерность понизить хочется, чтобы нагляднее было.

В общем, на днях я попробую накидать что-нибудь правдоподобное, если время будет.
Тем временем предлагаю самому поэкспериментировать над двумя предложенными вариантами:
1. сначала направить силу перпендикулярно нормали к поверхности, чтобы колобок катился в сторону цели,
2. затем адаптировать алгоритм из обсуждаемой ранее статьи для движения вдоль трассы, которая идёт по поверхности,
3. альтернативно — реализовать подпрыгивание: ограничить действие силы условием, что расстояние от объекта до поверхности не больше некоторого порогового («длины ног»)
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
21.12.2025, 17:38  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
как бы у него джетпак за спиной.
Да, именно так, я рад что Вы поняли проблему
Цитата Сообщение от Mysterious Light Посмотреть сообщение
1. сначала направить силу перпендикулярно нормали к поверхности, чтобы колобок катился в сторону цели,
В таких задачах нормаль - мутное дело. Движимые объекты имеют объем и площадь соприкосновения, напр донышко чайника может контактировать с полом в 10 местах что имеют совершенно разные нормали. Нужно бросить с десяток лучей изнутри чайника, найти нормали в точках пересечения с полом и рез-т усреднить. Это реализуемо, но "не украшает" решение, выходит сложно, трудоемко, "зато" не очень надежно.
Цитата Сообщение от Mysterious Light Посмотреть сообщение
2. колобок направляет кратковременную силу под углом к поверхности и вследствие этого прыгает. В краткосрочный интервал приземления он должен скорректировать следующий прыжок (особенно интересен случай, когда колобок пропёкся и потому удар упругий без гашения инерции).
Рассматривается только вариант rigidBody, объект никогда не деформируется, форма остается неизменной. "Прыгучесть" объекта (restitution) известна движку и может быть изменена/задана в опциях объекта(ов).

Вычислять/определять где объект (под)прыгнул и где приземлился - крайне неприятная задача, не говоря уже о реализации прыжков самому. Непрерывный контакт с поверхностью сам по себе мало что значит. Напр можно увеличить/уменьшить гравитацию в UI - анимации будут заметно отличаться, важен не только "есть контакт", но и сила с которой объект прижимается полу
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
21.12.2025, 20:22
Цитата Сообщение от Igor3D Посмотреть сообщение
В таких задачах нормаль - мутное дело. Движимые объекты имеют объем и площадь соприкосновения, напр донышко чайника может контактировать с полом в 10 местах что имеют совершенно разные нормали
Да, это проблема.
Впрочем, если на поверхности нет ямок, в которых колобок заданного радиуса R имеет розовый угол (см. рис.) всегда меньше прямого.

Цитата Сообщение от Igor3D Посмотреть сообщение
Рассматривается только вариант rigidBody, объект никогда не деформируется, форма остается неизменной. "Прыгучесть" объекта (restitution) известна движку и может быть изменена/задана в опциях объекта(ов).
Да.

Цитата Сообщение от Igor3D Посмотреть сообщение
Вычислять/определять где объект (под)прыгнул и где приземлился - крайне неприятная задача, не говоря уже о реализации прыжков самому.
Верно ли я понимаю, что используемый движок не может просчитать расстояние о объекта до ближайшей точки поверхности?

Цитата Сообщение от Igor3D Посмотреть сообщение
Непрерывный контакт с поверхностью сам по себе мало что значит.
Непрерывный контакт нам не нужен особо. Нам нужно, чтобы летящий в небе колобок не распускал крылья или встроенную ракету, а летел в свободном полёте до следующего приземления (контакт с поверхностью или достаточно близкое приближение).
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
22.12.2025, 17:34  [ТС]
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Верно ли я понимаю, что используемый движок не может просчитать расстояние о объекта до ближайшей точки поверхности?
Нет, этого не делает (насколько мне известно). Да и понятие "расстояние от/до объекта" неясно для объекта произвольной формы
Цитата Сообщение от Mysterious Light Посмотреть сообщение
если на поверхности нет ямок
Ну движение "по ухабам" - случай возможный, но далеко не самый популярный. Один из тестовых примеров - ступеньки лестницы. Скатиться (первый аттач) легко - достаточно направить силу, можно и убрать ее после того как набрана скорость. Дальше все сделает гравитация. А вот "взобраться" (подняться по лестнице, второй аттач) значительно труднее. Можно схитрить, инвертировать время первой анимации (типа "обратной съемки"), но это workaround. Заметим что направить силу "в заданную точку" (пример статьи) здесь не подходит
Миниатюры
Параметры объекта "сила"   Параметры объекта "сила"  
0
22.12.2025, 17:42  [ТС]

Не по теме:

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

Да, забыл сказать: в движке полным-полно Вашей любимой матрицы Якоби :)

0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
18.01.2026, 21:15
Igor3D, отвечу на первый пост.
Трение нужно применять не для поворотов, а всегда, тогда не придётся вводить костыль, как максимальная скорость - она определится сама, как скорость, когда сила трения сравнялась с силой, приложенной для движения.
А теперь вспоминаем, что сила трения твёрдых тел не зависит от скорости - тогда и минимальная скорость теряет смысл, скорость тела, движущегося по инерции, будет не экспоненциально стремиться к нулю, как при трении о воздух\воду, а вполне за конечное время спадать к нулю.
Поворот - это просто приложение усилия в другом направлении, инерция сама закруглит поворот, как надо.
И ещё. Лучше не массу приравнивать к единице - тогда начнутся проблемы при движениях с коллизиями, когда одно тело движется само, плюс толкает другое.
А вот 1/60 сек., выбранную за тик, вполне можно засчитать единицей, тогда сильно упрощаются все ньютоновские формулы, где присутствует время, часто ещё и в квадрате. Я так обычно и делаю, только за единицу принимаю, как правило, 1/200 сек.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
18.01.2026, 23:46  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Трение нужно применять не для поворотов, а всегда, тогда не придётся вводить костыль,
Пример: велосипедист делает поворот. Как я понимаю (в рамках школы, не стесняйтесь поправлять), за счет конструкции колеса возникает мощное трение скольжения, оно быстро гасит часть вектора скорости поперек нового направления. Какие есть решения

- давайте честно моделировать колесо/велосипед. Слишком сложно, но неэффективно, я не могу обязать юзера делать объекты "только с колесами"

- давайте зарядим (достаточно) мощную силу трения что действует всегда. Да, это будет работать, и, возможно, это даже можно сделать сейчас, для объекта есть параметр "трение" (и трение качения тоже), эффективное трение 2 объектов движок вычисляет как произведение этих параметров. Ну это надо подбирать параметры 2 объектов, по меньшей мере не очень удобно. И значение ускорения придется завысить чтобы компенсировать трение. И в реальной жизни так не происходит: без поворота на велик действует лишь небольшое трение качения. Поэтому "трение всегда" = костыль (какое мерзкое слово)
Цитата Сообщение от Mikle Quits Посмотреть сообщение
А теперь вспоминаем, что сила трения твёрдых тел не зависит от скорости - тогда и минимальная скорость теряет смысл,
Не понял, а почему теряет смысл (актуальность)?

Не по теме:

Цитата Сообщение от Mikle Quits Посмотреть сообщение
И ещё. Лучше не массу приравнивать к единице - тогда начнутся проблемы при движениях с коллизиями, когда одно тело движется само, плюс толкает другое.
Это опция, конечно можно и с учетом масс (через объем, плотность, эталонный объект)

0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
19.01.2026, 09:10
Цитата Сообщение от Igor3D Посмотреть сообщение
велосипедист делает поворот. Как я понимаю (в рамках школы, не стесняйтесь поправлять), за счет конструкции колеса возникает мощное трение скольжения, оно быстро гасит часть вектора скорости поперек нового направления. Какие есть решения
Есть такое понятие - круг трения, применяется для колёс.

Цитата Сообщение от Igor3D Посмотреть сообщение
я не могу обязать юзера делать объекты "только с колесами"
Тогда нужно определиться с задачей - мы пишем универсальный физ. движок?

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

Я написал много игр, в том числе FPS и автогонок, везде писал свою физику. Понимаю, что вопрос очень широкий, поэтому лучше разложить его на маленькие подзадачи и решать поэтапно, максимально подробно ставя условия, чего мы хотим добиться.
1
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
19.01.2026, 15:46  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Понимаю, что вопрос очень широкий, поэтому лучше разложить его на маленькие подзадачи и решать поэтапно, максимально подробно ставя условия, чего мы хотим добиться.
Вот (под)задача стартового поста
Цитата Сообщение от Igor3D Посмотреть сообщение
как изменить направление движения? Напр двигался объект по оси X а потом повернулся на 90 и движется вдоль Y?
Что здесь слишком широко, недостаточно конкретно? Как это можно еще упростить, разложить? Нужен пример объекта: тот же колобок что обсуждается ниже. Хотите гуманоидный персонаж? Не возражаю, давайте с ним
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
19.01.2026, 16:05
Цитата Сообщение от Igor3D Посмотреть сообщение
Что здесь слишком широко, недостаточно конкретно?
Хорошо. Продемонстрирую.
Решение задачи: поворачиваем вектор скорости на 90 гр., расчёт простой:
Code
1
2
xNew = -yOld
yNew = xOld
Ответ не устраивает? Но ведь он полностью решает задачу в представленной формулировке.
Не натурально? Тогда нужно уточнять для чего не натурально. Вот для луча света, к примеру, очень натурально.
Цитата Сообщение от Igor3D Посмотреть сообщение
Хотите гуманоидный персонаж?
Не то, чтобы я хочу. Я только хочу понять, что нужно. Вот чем не устраивает вышеприведённый способ? Слишком резко? Можно "смягчить", способов куча. Многие пользуются фейковыми (анимацией), я предпочитаю делать более физично, инерцией, силой трения - я это уже описал. Не совсем натурально? Тогда вопрос, к какой степени натуральности мы стремимся? Может нужно просчитывать каждый шаг?
Могу сделать демку, тогда можно будет более предметно обсуждать, что не нравится, только она же будет под Винду, а тут, я так понимаю, некоторые проблемы?
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
19.01.2026, 21:18  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Вот чем не устраивает вышеприведённый способ? Слишком резко?
Да хотя бы. Юзер должен решать какая инерция/занос ему нужны.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
я предпочитаю делать более физично, инерцией, силой трения - я это уже описал.
Сила трения - штатная опция движка. Но использовать ее для регулировки инерции, крутизны поворота по меньшей мере неудобно. Надо как-то подбирать трение для движущегося объекта, для колобка попробовал значения 0, 1 и 10. Ничего не меняется, колобок одинаково катится по диагонали. Может трение вообще не работает, хз. Или это связано с качением (его тоже менял). Ладно, меняю сферу (колобок) на кубик. Он на трение реагирует, но, поскольку он начинает всяко переворачиваться и прыгать, оценить трудно. В целом да, чем больше трение, тем круче поворот. Но как-то сознательно настроить не выходит. И для char'а (у меня это капсула на пружине) работать вряд ли будет (хотя не проверял). И это уже опция объекта, будет одинаково работать для любой силы, негибко. И нужен контакт поверхностей, а он не всегда желателен. В общем, изо всех щелей лезут неприятности

Правда есть др штатная опция движка "damping", она тупо гасит текущую скорость. Да, инерцию она давит хорошо, но поведение объекта становится странным, "заторможенным"

Если же мы не хотим ссылаться на что-то готовое/штатное, то никто не мешает ввести свой параметр силы для гашения инерции. Тогда зачем нам применять (большое) трение всегда? Почему напр не давить лишь ту компоненту скорости что не совпадает с текущим направлением? Ведь "колесный транспорт" так и работает в жизни. Правда проблема гравитации (см выше) остается

Не по теме:

Цитата Сообщение от Mikle Quits Посмотреть сообщение
Могу сделать демку, тогда можно будет более предметно обсуждать, что не нравится, только она же будет под Винду, а тут, я так понимаю, некоторые проблемы?
Спасибо, пока необходимости в демках/мувиках нет, просто поясните в чем предметность

0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
23.01.2026, 19:20  [ТС]
Пожуем это.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Трение нужно применять не для поворотов, а всегда, тогда не придётся вводить костыль, как максимальная скорость - она определится сама, как скорость, когда сила трения сравнялась с силой, приложенной для движения.
Пусть трение = 10, ускорение (сила) = 5. Неподвижный объект остается на месте, прилагаемая сила не может преодолеть "трение покоя". Хорошо, приложим бОльшую силу = 11. Объект начинает двигаться, через 1 сек его скорость = 1. Если та же сила прилагается в течение большего времени, скорость будет расти. Ограничивать макс скорость все равно придется. Да, сила = 10 достаточна чтобы объект, при отсутствии др факторов, двигался с текущей скоростью (по Галилею), но ничто не указывает на то какая скорость текущая, это все равно придется задать. Также если хотим движение с минимальной скоростью - что-то задавать придется, само трение ничего не решает.

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

Хорошо, тогда почему бы не заявить "объект умеет тормозить"? Любой тормоз так или иначе сводится к гашению текущей скорости объекта. Почему бы это не сделать самым простым и естественным образом: задать параметр Brake (рабочее название), который будет давить вектор скорости, но не тупо "весь" а лишь часть не сонаправленную с текущей? Ведь так работает колесо.

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

Не по теме:

Проблема в том что утверждать/заявлять никто ничего не хочет. Вот спрятаться за ссылочку (чуть лучше за личный опыт) - то да :)

0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
23.01.2026, 21:11
Цитата Сообщение от Igor3D Посмотреть сообщение
параметр Brake (рабочее название), который будет давить вектор скорости, но не тупо "весь" а лишь часть не сонаправленную с текущей? Ведь так работает колесо.
В колесе сила трения сонаправлена не с текущей скоростью, а с направлением оси колеса. Текущая скорость не обязана быть перпендикулярна оси - колесо может быть в заносе. А вот продольная компонента силы трения действительно может задаваться параметром Brake, но в пределах поперечной. А, если колесо ведущее, то и параметрами двигателя, его сопротивлением попытке изменить его нормальную скорость при данной глубине нажатия педали Газ, коэффициентом передачи КПП, глубиной нажатия педали "Сцепление". Последнее для простоты можно игнорировать.

Цитата Сообщение от Igor3D Посмотреть сообщение
Правда возникает проблема: так мы можем задавить и что-то нужное/ценное, напр гравитацию. Скорость создается всеми силами симуляции, в каждый момент времени мы не можем знать откуда она взялась.
Вот именно, поэтому я и считаю правильным просто сложить все действующие силы, не вникая в их происхождение.

Цитата Сообщение от Igor3D Посмотреть сообщение
Двигая объект с помощью силы мы тем самым утверждаем: "объект умеет двигаться". Почему - его личное дело
Нет, правильнее будет "объект умеет прилагать усилие для движения".

Цитата Сообщение от Igor3D Посмотреть сообщение
хотим остаться в рамках очень общей физической модели.
Не получится. Некоторые очень важные вещи в шутере и в автосиме делаются по-разному, и это принципиально. Например, в шутере для персонажа не применяется понятие "момент вращения", мы просто поворачиваем его мышкой, как будто момента вращения нет. А вот автосим без момента вращения сделать не удастся хоть немного реалистичным.

Вот небольшой фрагмент видео поведения машины из моей игры:
https://disk.yandex.ru/i/_K2h9IpMucACkg
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
24.01.2026, 17:04  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Вот небольшой фрагмент видео поведения машины из моей игры:
https://disk.yandex.ru/i/_K2h9IpMucACkg
А почему Вы не воспользовались сервисом "vehicles" того же движка? Это типа системы управления машинками (колеса + кузов), вполне вменяемая. Есть и более продвинутые, наверняка Вам это известно
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Не получится. Некоторые очень важные вещи в шутере и в автосиме делаются по-разному, и это принципиально. Например, в шутере для персонажа не применяется понятие "момент вращения", мы просто поворачиваем его мышкой, как будто момента вращения нет. А вот автосим без момента вращения сделать не удастся хоть немного реалистичным.

Не по теме:

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

Вероятно имеется ввиду наклон/крен автомобиля при резком повороте. Если так, то кто вас/нас заставлял это считать? Это к нашей теме не относится, мы считаем силу (типа "вектор тяги двигателя"), а вот как движок распорядится этой силой, какую скорость и какой поворот/трансформ он сделает объекту - это дело движка, он отвечает за реализм. Может и сделает наклон, может и нет, тогда и бум думать как достичь лучшего реализма. А сейчас надо обеспечить управление несчастным колобком

Цитата Сообщение от Mikle Quits Посмотреть сообщение
В колесе сила трения сонаправлена не с текущей скоростью, а с направлением оси колеса. Текущая скорость не обязана быть перпендикулярна оси - колесо может быть в заносе. А вот продольная компонента силы трения действительно может задаваться параметром Brake, но в пределах поперечной.
Да, я неправильно сказал, не "текущий" а "требуемый". Хотелось бы здесь лучше понять. Вот колесо(а) уже повернуто, но вектор скорости еще старый. Что происходит? Допустим разлагаем текущий/старый на компоненту вдоль нового напр-я и поперек. И дальше что? Как применить трение (и какое). Спасибо

Да, ну и актуально: как сохранить гравитацию? Заметим что большое/достаточное трение эту проблему не решает (во всяком случае полностью).
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
24.01.2026, 18:51
Цитата Сообщение от Igor3D Посмотреть сообщение
А почему Вы не воспользовались сервисом "vehicles" того же движка?
Какого движка? Я всё сам писал, там нет ни физических, ни графических, никаких других движков.
И отвечал я именно в таком разрезе, теоретическом, а не как на практике заставить конкретный движок что-то сделать. Этого я не знаю, для этого нужно сначала изучить движок.
Цитата Сообщение от Igor3D Посмотреть сообщение
Вероятно имеется ввиду наклон/крен автомобиля при резком повороте
Нет. Это только маленький частный случай, а момент инерции актуален для автомобиля всегда. Точнее даже не момент, а тензор, ведь вращение может быть вокруг любой оси.
Цитата Сообщение от Igor3D Посмотреть сообщение
Вот колесо(а) уже повернуто, но вектор скорости еще старый. Что происходит? Допустим разлагаем текущий/старый на компоненту вдоль нового напр-я и поперек. И дальше что? Как применить трение (и какое)
Я уже писал - для этого используют круг трения, цитата из интернета:
Концепция круга трения основана на том, что предел трения для шины не зависит от направления её приложения. Трение может быть использовано для боковой силы, тормозной силы или комбинации их обоих — либо в положительном, либо в отрицательном направлении. Но в любом случае не может быть общего вектора двух сил, превышающего предел трения.
Цитата Сообщение от Igor3D Посмотреть сообщение
ну и актуально: как сохранить гравитацию?
Понять бы, как она теряется. Трение направлено вдоль поверхности и только при соприкосновении с этой поверхностью. Компонента гравитации, нормальная поверхности, останется.
Есть ещё трение о воздух, но оно зависит от скорости и не будет сильно препятствовать гравитации до определённой скорости.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
25.01.2026, 14:56  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Понять бы, как она теряется. Трение направлено вдоль поверхности и только при соприкосновении с этой поверхностью. Компонента гравитации, нормальная поверхности, останется.
Ну как теряется ясно, за счет вычитания (части) вектора текущей скорости, а нем есть и компонента что вносит гравитация. А если вычитать др вектор (вместо текущей скорости) - тогда надо сформулировать какой и откуда его взять

Отслеживать нормаль и контакт с поверхностью реально, но далеко не бесплатно
0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
25.01.2026, 18:56
Цитата Сообщение от Igor3D Посмотреть сообщение
Отслеживать нормаль и контакт с поверхностью реально, но далеко не бесплатно
Бесплатно оно не будет, а без этого никак. Разве что, писать игру с заранее запланированными сильными ограничениями, например, автосим, 3D, но такая дорога, где машина не может подпрыгнуть - плавные подъёмы, спуски, наклоны, ограничения (дома, заборы), от которых отскок происходит без подскока, никаких ям. Так можно обойтись только моментом инерции (без тензора), не считать физику для каждого колеса. Я такое писал, выглядит вполне естественно, хотя физика - полный фейк.
Ещё раз - я могу расписать решение конкретной задачи поэтапно, но пока конкретной задачи нет. На вопрос "как сохранить гравитацию?" нельзя ответить, не зная, что уже сделано и какими средствами. Особенно, если используется некий абстрактный движок, и неизвестно, какую часть работы делает он, почему нельзя всю физику переложить на него. Если он не может, так зачем он тогда нужен вообще.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,884
Записей в блоге: 2
25.01.2026, 21:04  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Ещё раз - я могу расписать решение конкретной задачи поэтапно, но пока конкретной задачи нет. На вопрос "как сохранить гравитацию?" нельзя ответить, не зная, что уже сделано и какими средствами. Особенно, если используется некий абстрактный движок, и неизвестно, какую часть работы делает он, почему нельзя всю физику переложить на него. Если он не может, так зачем он тогда нужен вообще.
Используется популярный движок Bullet, выше в теме я давал советы как с ним быстро ознакомиться.

По поводу "конкретики" - я (наивно) полагал что это ясно из названия темы. Вот у Вас есть движок, как Вы его будете использовать? Как библиотеку, вызывать его ф-ции API (например). Я подключаю движок к приложению, где юзер (не программист) может назначить объекты для симуляции, задать их опции и жмакнуть кнопку Go. Созданная движком симуляция записывается по кадрам и может проигрываться/переназначаться/редактироваться вручную. Обрушение карточного домика или цепочки домино - давно пройденный этап. Сейчас интересуют "активные" объекты которыми можно управлять с помощью сил (сила - объект создаваемый юзером, имеет опции UI).

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

Не по теме:

Цитата Сообщение от Mikle Quits Посмотреть сообщение
без тензора
Насколько помню, "тензор" - общее название любых линейных операций, напр вектор - тоже тензор. Поэтому не понял что Вы имели ввиду. К слову, в движке любой динамический объект имеет "тензор инерции", но я никогда не понимал что это значит :)

0
 Аватар для Mikle Quits
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
25.01.2026, 21:37
Цитата Сообщение от Igor3D Посмотреть сообщение
в движке любой динамический объект имеет "тензор инерции", но я никогда не понимал что это значит
Это структура, объединяющая три момента инерции - вокруг трёх основных осей.
Цитата Сообщение от Igor3D Посмотреть сообщение
давайте научимся гонять по сцене шарик/колобок как мы хотим.
А что происходит, если просто создать шарик, сцену, задать гравитацию - и отпустить шарик? Движок отрабатывает? По идее - до первого касания со сценой всё точно должно быть хорошо, дальше - отскок, вот тут уже появляются нюансы, насколько упругий отскок? Должен задаваться коэффициент упругости. На сколько гладкий отскок? То есть нужно задавать коэффициент трения и тензор инерции для шарика. Дальше остаётся, разве что, задать трение о воздух, ну и можно задать коэффициент трения на качение шарика, чтобы катящийся по плоскости шарик останавливался, всё же, быстрее, чем от трения о воздух только.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2026, 21:37
Помогаю со студенческими работами здесь

Оценка параметров объекта по изображению
Здравствуйте, мне нужна программма на языке С++ позволяющая по исходному изображению определить...

Сегментация карты глубины на объекты. Определение параметров объектов
Доброго времени суток. В наличии конвейер и 3 камеры, выдающих карту глубин. SDK камер выдает...

Построение силовых линий
Векторное поле представлено двумерным массивом, каждый элемент которого хранит значение поля в...

Генерация случайного сильно связанного орграфа
Здравствуйте. Необходимо, случайным образом, генерировать сильно связный орграф с заданным...

Метод грубой силы при обработке графов
Всем привет! Вот условие задачи: дано около 20 топологий графа (две наиболее простых и понятных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru