Параметры объекта "сила"05.10.2025, 20:29. Показов 4309. Ответов 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
Сила (по Ньюьону и без) Как отличить часть объекта от собственности объекта? Получить необходимый объект по параметру |
| 31.01.2026, 16:11 [ТС] | |||||||||
F = 1 * 50 * 50 / 15 ~ 166.6 Двигатель развивающий ускорение 10 (согласен, мощность здесь звучит лучше) ну никак не вытянет поворот 166. Попробуем посчитать модуль силы (с направлением ясно) простой арифметикой L = 2 * PI * R // длина полного поворота T = L / CurrentSpeed // время полного поворота для текущей скорости, соответствует углу поворота 2 * PI радиан angle = 2 * PI * dt / T // угол поворота за тик dt angle = 2 * PI * dt * CurrentSpeed / (2* PI * R) = dt * CurrentSpeed / R = (1 / 60) * 50 / 15 = 0.0555 радиан (3.15 градусов) Длина перпендикулярного вектора скорости = CurrentSpeed * tan(angle) = 50 * 0.0555 = 2.775 Это пройденный перпендикулярный путь за 1 сек, с учетом ускорения еще двойка, итого 2.775 * 2 F = 5.55 Выглядит разумно, т.е. Acceleration = 10 достаточно для поворота с радиусом = 15. А вот с радиусом = 5 уже нет, тогда возможно придется привлекать торможение
0
|
|||||||||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
||||
| 01.02.2026, 08:59 | ||||
|
Пусть нам нужно развернуть объект не на 90, а на 180 гр. с радиусом 15 м. Значит объект проходит половину окружности 2*Pi*R/2 = Pi*R ~ 50м, при скорости 50 м/с это 1 секунда на весь разворот, то есть только по оси X скорость за секунду меняется с 50 на -50, то есть на 100 м/с, а у нас ускорение 10 м/с. И это не учитывалось, что часть мощности тратилась на ускорение, а потом торможение по оси Z. То есть ускорения 10 сильно не хватит, что показал и прикидочный расчёт выше. Если нужно посчитать этот угол, то это делается так: При повороте без сносов и пробуксовок все колёса идут ровно по своему кругу. Круги у передних колёс несколько больше, чем у задних. Строго говоря, передние колёса нужно поворачивать на разный угол (видно из рисунка), но для того у машины и делается схождение передних колёс, а угол считаем усреднённый не для каждого колеса, а для середин передней и задней осей. Середины задней и передней осей и центр поворота дают прямоугольный треугольник ABO. Гипотенуза - радиус поворота. Расстояние между осями AB - база машины. Угол при вершине O - и есть искомый угол поворота передних колёс.
1
|
||||
| 01.02.2026, 16:16 [ТС] | |||||
|
Пример: скорость = 0, и объект может двигаться только по оси X, а требуется по Z. Нужно, разворачивая вектор скорости, вырулить на требуемое направление (0, 0, 1). Задаем макс угол, напр 30. Все хорошо, на первом шаге напр-е вектора скорости = (0.866, 0, 0.5), и вращаем его до нужного. Только вот мелкая неприятность: при разных симуляциях с разными dt поведение не воспроизводимо. Как порешать?
0
|
|||||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
|||
| 01.02.2026, 17:02 | |||
|
Я вообще не пойму, в чём проблема. Ведь у нас не машина, а условный шарик. Ну, не хватает нам 10 м/с, можно дать 200, кто мешает? Нужно, чтобы он разворачивался за одинаковое время, независимо от скорости? Можно сделать рулящую силу пропорциональной текущей скорости. Но вообще - это нормально, что про больших скоростях повороты выходят медленнее.
1
|
|||
| 01.02.2026, 20:18 [ТС] | ||||
|
CurrentSpeed += Acceleration * dt Выходит нужно иметь Acceleration = 2.775 * 60 = 166.5 чтобы довернуть вектор силы на 3.15 градуса за один тик (совпадает с Вашей центростремительной силой). Ну и "на глазок": если разгонялись 5 сек то сделать полный оборот за 1.9 сек явно нереально
0
|
||||
| 02.02.2026, 19:13 [ТС] | ||
|
Изменим немного данные, пусть двигатель мощнее и разгоняется до нужной скорости за 0.5 сек
dt = 1/60 CurrentSpeed = 10 Acceleration = 20 Тогда, если прилагать силу перпендикулярно, угол поворота за один тик = atan(20 / 60 / 10) = 0.033 радиан, 1.9 градусов, время поворота на 90 примерно 47 тиков, 0.79 сек. Тоже как-то вяло. Ну или задирать дальше Acceleration, делая двигатель все мощнее Немного погуглил на тему "как летает муха", инфы немного. Крейсерская скорость 6.4 км/ч (1.78 м/сек), может разгоняться до 8 км/ч. Да, но вот с поворотом
0
|
||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
|||
| 02.02.2026, 19:40 | |||
|
0
|
|||
| 07.02.2026, 15:45 [ТС] | |
|
Выводы:
- прилагать силу перпендикулярно текущей скорости возможно и нужно когда требуется плавный поворот вектора скорости (движение "лицом вперед"), хотя это и увеличивает время поворота. Чтобы добиться более резкого поворота можно увеличивать Acceleration, но иметь такую "мега-силу" обычно невыгодно. Лучше выглядит использование Brake что гасит текущую скорость (компоненту не совпадающую с требуемой). - если объект имеет приличную/нормальную текущую скорость, то просто прилагаем Acceleration и вычитаем Brake, полученный вектор обрезаем до MaxSpeed. Проблема возникает если текущая скорость мала или нулевая. Думаю нужно задать минимальное время поворота на 360 (или на 180). Пример: чайник неподвижен и носик смотрит (1, 0, 0), сила прилагается (0, 0, 1). Заданное время разворота 1 сек, значит за dt = 1/60 выполняется поворот на 3 градуса и вектор силы (скармливаемый движку) = (tan(radian(3), 0, 1) - параметры для "движения лицом вперед" Face Axis - направление/ось "вперед" в модельных координатах (напр +X для стандартного чайника). Ось None значит фича неактивна, чайник может двигаться носом взад и как угодно Min Turn Time - минимальное время разворота на 180 Проблему с гравитацией это не решает
0
|
|
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
||||||
| 07.02.2026, 17:26 | ||||||
|
0
|
||||||
| 07.02.2026, 18:56 [ТС] | |||||
|
Кстати тут еще проблемный случай. Возможен вариант когда текущая скорость совсем не совпадает с направлением face (другие силы не запрещены). Что предложите для такого случая? Может Вы полагаете что фрагменты что Вы приводили "более физичны"? Уверяю что это не так, стоит лишь слегка "копнуть"Проблема. Пример. Вот управляли объектом, и он упал с горы/обрыва. Или подпрыгнул на кочке. Вот тут-то (в полете) тормозить (и убивать гравитацию) точно не надо. А может и ускорение не прилагать. Я предполагаю что Вы ответите, но все-таки постарайтесь не быть банальным Спасибо
0
|
|||||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
|||||||||
| 07.02.2026, 19:22 | |||||||||
|
Чтобы получить ответ, нужно полностью поставить условия задачи. И ещё раз утверждаю: F - это как раз сумма (векторная) Brake и Acceleration, если нужна "запредельная" F, значит и Brake и Acceleration нужны такие же запредельные. Во-вторых, про противоречие я написал про фразу "полученный вектор обрезаем до MaxSpeed". Вот так прямо берём, и обрезаем? Что-то многовато вышло? Я конкретно пишу, что "смущает". Там нигде не написано "слишком просто". Не нужно за меня додумывать. Но я не призываю к физичности, я призываю определиться, как требуется, чтобы было. Можно и нефизично - просто анимировать движение объекта по любой траектории, которая нравится, но тогда не нужно физику приплетать. Ещё один, 1485-й раз: условия задачи не заданы.
0
|
|||||||||
| 09.02.2026, 17:58 [ТС] | |
|
Погуглил, поразмышлял. Оказывается я неправильно понимал базовые вещи
Ошибка в том что я пытался приспособить Acceleration для поворота, прилагал его перпендикулярно скорости и.т.п. Ничего этого в жизни нет. Пример: велосипедист. Acceleration - это как он крутит педали, разгоняя велик (впрочем может и тормозить). Вот он набрал скорость и поворачивает на 90, педали при повороте обычно не крутит, т.е. Acceleration = 0. Поворот успешно выполняется, важна текущая скорость и без разницы сколько до нее разгонялся, хоть час. То есть поворот достигается "рулением", поворотом колес. Лезть туда дальше (круг трения и все такое) пока не видно смысла. Но ряд позиций поменялся - я (ошибочно) полагал, что чем мощнее сила (больше Acceleration) - тем быстрее выполнится поворот (на той же скорости). Это не так, сила может не менять скорость вообще, но уметь "рулить" менять напр-е движения - на бОльших скоростях и радиус поворота больше - оказывается тоже неверно. До определенной скорости (типа штатное, безаварийное движение) радиус поворота одинаков на разных скоростях и определяется углом поворота руля/колес. Нашел калькулятор, хотя видел и другой (рез-ты разные). Если же скорость превысит предел - наступает скольжение и далее переворот. - а как же старикашка Ньютон? Ведь чтобы изменить вектор скорости (1, 0, 0) -> (0, 0, 1) нужно же приложить силу, сам собой вектор скорости не изменится. Честно говоря: не знаю. Но велосипедист же педали не крутит и сил вроде не прикладывает, а при повороте руля вектор скорости меняется. Остается предположить/уповать что "конструкция колеса так делает". Кстати должна быть заметная потеря энергии. А с "наклоном" объекта при повороте вроде понятно Все это конечно хорошо, пусть юзверь задал радиус поворота объекта. И как считать шаг симуляции?
0
|
|
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
||||
| 09.02.2026, 20:55 | ||||
|
Поэтому:
1
|
||||
| 10.02.2026, 17:27 [ТС] | ||||
|
Ну хорошо, но моя цель - не углУбить свои познания, а создать объект-контроллер. Не по теме:
0
|
||||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
||||
| 10.02.2026, 20:51 | ||||
|
Но вычислять её не нужно - в природе (и в физ движке) она возникает сама.
0
|
||||
| 11.02.2026, 13:59 [ТС] | ||
|
v - текущая скорость face - направление "вперед" dir - требуемое направление Требуется посчитать F - прилагаемую силу на интервале dt. Заметим что вектора v и face могут и не совпадать, из-за воздействия др сил объект может двигаться "юзом". Не по теме: Кстати машинки в движке (vehicles) учитывают возможное скольжение и переворот
0
|
||
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
|
| 11.02.2026, 17:34 | |
|
Мы ходим по кругу - это уже было, просто перпендикулярная к текущей скорости сила. И это не импульс, её не нужно вычислять на каждом dt, её надо просто задать, а когда поворот произойдёт - убрать. Она не зависит от тайминга.
0
|
|
|
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
|
||
| 11.02.2026, 22:43 | ||
|
0
|
||
| 11.02.2026, 22:43 | |
|
Оценка параметров объекта по изображению Сегментация карты глубины на объекты. Определение параметров объектов Построение силовых линий Генерация случайного сильно связанного орграфа Метод грубой силы при обработке графов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|