Параметры объекта "сила"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 скорости сама по себе не иссякнет.
Спасибо
0
|
|||
| 05.10.2025, 20:29 | |
|
Ответы с готовыми решениями:
78
Сила (по Ньюьону и без) Как отличить часть объекта от собственности объекта? Получить необходимый объект по параметру |
| 19.12.2025, 17:12 [ТС] | |||||||
|
0
|
|||||||
|
|
||||
| 19.12.2025, 20:36 | ||||
|
Кажется, у меня сошлось и задача понятна.
Если же он «подпрыгивает», то ненулевая «его сила» может быть только вблизи поверхности. Кстати, если мы говорим об обычном колобке, то тут мне видятся два правдоподобных варианта: 1. колобок непрерывно направляет силу вдоль поверхности и вследствие этого катится по ней к цели. Если колобок совсем не отрывается от поверхности, то метод решения задачи можно брать с сайта, адаптируя его под неровную поверхность в 3D. 2. колобок направляет кратковременную силу под углом к поверхности и вследствие этого прыгает. В краткосрочный интервал приземления он должен скорректировать следующий прыжок (особенно интересен случай, когда колобок пропёкся и потому удар упругий без гашения инерции). Может быть, если ещё варианты, но я их пока не вижу. Причём эти два варианта можно сочетать друг с другом, но не одновременно, а чередуя режимы (подкатился — запрыгнул — покатился дальше). Во-первых, нужно выделить какие-то конкретные типы «маркеров движения» (одна точка назначения, кривая пути и т.п.). Во-вторых, (и это НЕ стоит здесь обсуждать) надо бы сделать их «семантическими маркерами пути», чтобы пользователь мог их интерпретировать в контексте его прикладной задачи. В-третьих, это надо реализовать в виде графического редактора (не в JSON же эти маркеры будут специфицироваться). В общем, на днях я попробую накидать что-нибудь правдоподобное, если время будет. Тем временем предлагаю самому поэкспериментировать над двумя предложенными вариантами: 1. сначала направить силу перпендикулярно нормали к поверхности, чтобы колобок катился в сторону цели, 2. затем адаптировать алгоритм из обсуждаемой ранее статьи для движения вдоль трассы, которая идёт по поверхности, 3. альтернативно — реализовать подпрыгивание: ограничить действие силы условием, что расстояние от объекта до поверхности не больше некоторого порогового («длины ног»)
0
|
||||
| 21.12.2025, 17:38 [ТС] | ||||
|
Вычислять/определять где объект (под)прыгнул и где приземлился - крайне неприятная задача, не говоря уже о реализации прыжков самому. Непрерывный контакт с поверхностью сам по себе мало что значит. Напр можно увеличить/уменьшить гравитацию в UI - анимации будут заметно отличаться, важен не только "есть контакт", но и сила с которой объект прижимается полу
0
|
||||
|
|
|||||
| 21.12.2025, 20:22 | |||||
|
Впрочем, если на поверхности нет ямок, в которых колобок заданного радиуса R имеет розовый угол (см. рис.) всегда меньше прямого.
0
|
|||||
| 22.12.2025, 17:34 [ТС] | |||
|
0
|
|||
| 22.12.2025, 17:42 [ТС] | |
|
Не по теме: По поводу "может ли колобок застрять в ямке" - вполне, если сила недостаточна чтобы его вытолкнуть. Ну юзер может его вызволить напр увеличивая силу в нужный момент, это в его руках
0
|
|
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
|
| 18.01.2026, 21:15 | |
|
Igor3D, отвечу на первый пост.
Трение нужно применять не для поворотов, а всегда, тогда не придётся вводить костыль, как максимальная скорость - она определится сама, как скорость, когда сила трения сравнялась с силой, приложенной для движения. А теперь вспоминаем, что сила трения твёрдых тел не зависит от скорости - тогда и минимальная скорость теряет смысл, скорость тела, движущегося по инерции, будет не экспоненциально стремиться к нулю, как при трении о воздух\воду, а вполне за конечное время спадать к нулю. Поворот - это просто приложение усилия в другом направлении, инерция сама закруглит поворот, как надо. И ещё. Лучше не массу приравнивать к единице - тогда начнутся проблемы при движениях с коллизиями, когда одно тело движется само, плюс толкает другое. А вот 1/60 сек., выбранную за тик, вполне можно засчитать единицей, тогда сильно упрощаются все ньютоновские формулы, где присутствует время, часто ещё и в квадрате. Я так обычно и делаю, только за единицу принимаю, как правило, 1/200 сек.
0
|
|
| 18.01.2026, 23:46 [ТС] | |||
|
- давайте честно моделировать колесо/велосипед. Слишком сложно, но неэффективно, я не могу обязать юзера делать объекты "только с колесами" - давайте зарядим (достаточно) мощную силу трения что действует всегда. Да, это будет работать, и, возможно, это даже можно сделать сейчас, для объекта есть параметр "трение" (и трение качения тоже), эффективное трение 2 объектов движок вычисляет как произведение этих параметров. Ну это надо подбирать параметры 2 объектов, по меньшей мере не очень удобно. И значение ускорения придется завысить чтобы компенсировать трение. И в реальной жизни так не происходит: без поворота на велик действует лишь небольшое трение качения. Поэтому "трение всегда" = костыль (какое мерзкое слово)
0
|
|||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
||||
| 19.01.2026, 09:10 | ||||
|
Я написал много игр, в том числе FPS и автогонок, везде писал свою физику. Понимаю, что вопрос очень широкий, поэтому лучше разложить его на маленькие подзадачи и решать поэтапно, максимально подробно ставя условия, чего мы хотим добиться.
1
|
||||
| 19.01.2026, 15:46 [ТС] | |||
|
0
|
|||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
||||||||
| 19.01.2026, 16:05 | ||||||||
|
Решение задачи: поворачиваем вектор скорости на 90 гр., расчёт простой:
Не натурально? Тогда нужно уточнять для чего не натурально. Вот для луча света, к примеру, очень натурально. Могу сделать демку, тогда можно будет более предметно обсуждать, что не нравится, только она же будет под Винду, а тут, я так понимаю, некоторые проблемы?
0
|
||||||||
| 19.01.2026, 21:18 [ТС] | |||
|
Правда есть др штатная опция движка "damping", она тупо гасит текущую скорость. Да, инерцию она давит хорошо, но поведение объекта становится странным, "заторможенным" Если же мы не хотим ссылаться на что-то готовое/штатное, то никто не мешает ввести свой параметр силы для гашения инерции. Тогда зачем нам применять (большое) трение всегда? Почему напр не давить лишь ту компоненту скорости что не совпадает с текущим направлением? Ведь "колесный транспорт" так и работает в жизни. Правда проблема гравитации (см выше) остается
0
|
|||
| 23.01.2026, 19:20 [ТС] | ||
|
Пожуем это.
Двигая объект с помощью силы мы тем самым утверждаем: "объект умеет двигаться". Почему - его личное дело (двигатель, сила мышц, конструкция колеса и.т.п). Не вижу здесь ничего неправильного, неконкретного, хотим остаться в рамках очень общей физической модели. Хорошо, тогда почему бы не заявить "объект умеет тормозить"? Любой тормоз так или иначе сводится к гашению текущей скорости объекта. Почему бы это не сделать самым простым и естественным образом: задать параметр Brake (рабочее название), который будет давить вектор скорости, но не тупо "весь" а лишь часть не сонаправленную с текущей? Ведь так работает колесо. Правда возникает проблема: так мы можем задавить и что-то нужное/ценное, напр гравитацию. Скорость создается всеми силами симуляции, в каждый момент времени мы не можем знать откуда она взялась. Не по теме: Проблема в том что утверждать/заявлять никто ничего не хочет. Вот спрятаться за ссылочку (чуть лучше за личный опыт) - то да :)
0
|
||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
|||||
| 23.01.2026, 21:11 | |||||
|
Вот небольшой фрагмент видео поведения машины из моей игры: https://disk.yandex.ru/i/_K2h9IpMucACkg
0
|
|||||
| 24.01.2026, 17:04 [ТС] | ||||
|
Не по теме: Для широкого круга читателей: в движке "момент вращения" - вектор, направление которого = ось вращения, а модуль = угол поворота в радианах. Правду сказать, я никогда не понимал почему движок (с наглой мордой) складывает эти моменты как самые обычные вектора (ведь матричные повороты не коммутативны!), и все работает Да, ну и актуально: как сохранить гравитацию? Заметим что большое/достаточное трение эту проблему не решает (во всяком случае полностью).
0
|
||||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
||||||
| 24.01.2026, 18:51 | ||||||
|
И отвечал я именно в таком разрезе, теоретическом, а не как на практике заставить конкретный движок что-то сделать. Этого я не знаю, для этого нужно сначала изучить движок.
Есть ещё трение о воздух, но оно зависит от скорости и не будет сильно препятствовать гравитации до определённой скорости.
0
|
||||||
| 25.01.2026, 14:56 [ТС] | ||
|
Отслеживать нормаль и контакт с поверхностью реально, но далеко не бесплатно
0
|
||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
||
| 25.01.2026, 18:56 | ||
|
Ещё раз - я могу расписать решение конкретной задачи поэтапно, но пока конкретной задачи нет. На вопрос "как сохранить гравитацию?" нельзя ответить, не зная, что уже сделано и какими средствами. Особенно, если используется некий абстрактный движок, и неизвестно, какую часть работы делает он, почему нельзя всю физику переложить на него. Если он не может, так зачем он тогда нужен вообще.
0
|
||
| 25.01.2026, 21:04 [ТС] | ||
|
По поводу "конкретики" - я (наивно) полагал что это ясно из названия темы. Вот у Вас есть движок, как Вы его будете использовать? Как библиотеку, вызывать его ф-ции API (например). Я подключаю движок к приложению, где юзер (не программист) может назначить объекты для симуляции, задать их опции и жмакнуть кнопку Go. Созданная движком симуляция записывается по кадрам и может проигрываться/переназначаться/редактироваться вручную. Обрушение карточного домика или цепочки домино - давно пройденный этап. Сейчас интересуют "активные" объекты которыми можно управлять с помощью сил (сила - объект создаваемый юзером, имеет опции UI). Какие объекты и как юзер захочет двигать - его личное дело, т.е. мне надо поддерживать общий случай (что совсем не значит "неконкретно, плохо поставленная задача"). Автомобили с колесами - для этого в движке есть специальные средства, они занимаются какие колеса ведущие, корректной угловой скоростью, спиннингом и.т.п. В общем, "автосим" здесь своя, отдельная песня, в эту специфику в данной теме не лезем. Разумно начать "управление объектами" с чего-то простого, напр давайте научимся гонять по сцене шарик/колобок как мы хотим.
0
|
||
|
769 / 286 / 17
Регистрация: 21.01.2023
Сообщений: 457
|
|||
| 25.01.2026, 21:37 | |||
|
0
|
|||
| 25.01.2026, 21:37 | |
|
Помогаю со студенческими работами здесь
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, то после закрытия окошка. . .
|