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

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

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

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

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

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

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

78
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
31.01.2026, 16:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Будь это шарик - достаточно вспомнить формулу центростремительной силы:
F = m*v^2/R
Эту силу необходимо прикладывать для поворота объекта заданной массы, с заданной текущей скоростью и с заданным радиусом поворота.
Если же это автомобиль,
Для автомобилей в движке есть система vehicles, это за рамками темы. Здесь нас интересует "просто объект", да, в простейшем случае шарик/колобок. С центростремительной силой выходит какая-то полная фигня. Повторим исходные данные
C++
1
2
3
4
5
6
dt = 1/60 sec                  // тик симуляции
CurrentSpeed = (50, 0, 0)  m/sec  // вектор текущей скорости
MaxSpeed = 50 m/sec            // макс скорость
Acceleration = 10 m/(sec * sec)  // ускорение
ForceDir = (0, 0, 1)         // требуемое направление вектора скорости  
Radius = 15 m               // радиус поворота (?)
Тогда центростремительная сила (единичная масса)
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 уже нет, тогда возможно придется привлекать торможение
Цитата Сообщение от Mikle Quits Посмотреть сообщение
нам нужно задать угол поворота рулящих колёс,
Да, причем хорошо бы и для объекта без всяких колес. Задание радиуса.. ну как-то доверия внушает (хотя реальных аргументов у меня нет). Но как задать угол? В примере выше угол = 3.15, но это для конкретного шага dt = 1/60. Для шага 1/30 угол будет вдвое больше (грубо), и что должен задавать юзверь?
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Однако тут имеются передачи, заносы\пробуксовки, наклоны корпуса машины по двум осям:
Автомобили - своя песня, здесь мы хотим просто "двигать объект" (возможно char)
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
01.02.2026, 08:59
Цитата Сообщение от Igor3D Посмотреть сообщение
С центростремительной силой выходит какая-то полная фигня.
Ну какая же фигня? Простая прикидка:
Пусть нам нужно развернуть объект не на 90, а на 180 гр. с радиусом 15 м. Значит объект проходит половину окружности 2*Pi*R/2 = Pi*R ~ 50м, при скорости 50 м/с это 1 секунда на весь разворот, то есть только по оси X скорость за секунду меняется с 50 на -50, то есть на 100 м/с, а у нас ускорение 10 м/с. И это не учитывалось, что часть мощности тратилась на ускорение, а потом торможение по оси Z.

Цитата Сообщение от Igor3D Посмотреть сообщение
Это пройденный перпендикулярный путь за 1 сек
Не за 1 сек., а за 1 тик, то есть за 1/60 сек.
То есть ускорения 10 сильно не хватит, что показал и прикидочный расчёт выше.

Цитата Сообщение от Igor3D Посмотреть сообщение
Но как задать угол? В примере выше угол = 3.15, но это для конкретного шага dt = 1/60. Для шага 1/30 угол будет вдвое больше (грубо), и что должен задавать юзверь?
Какое отношение угол поворота передних колёс имеет к углу, на который машина поворачивает за тик?
Если нужно посчитать этот угол, то это делается так:
При повороте без сносов и пробуксовок все колёса идут ровно по своему кругу. Круги у передних колёс несколько больше, чем у задних. Строго говоря, передние колёса нужно поворачивать на разный угол (видно из рисунка), но для того у машины и делается схождение передних колёс, а угол считаем усреднённый не для каждого колеса, а для середин передней и задней осей. Середины задней и передней осей и центр поворота дают прямоугольный треугольник ABO. Гипотенуза - радиус поворота. Расстояние между осями AB - база машины. Угол при вершине O - и есть искомый угол поворота передних колёс.
Миниатюры
Параметры объекта "сила"  
1
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
01.02.2026, 16:16  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Длина перпендикулярного вектора скорости = CurrentSpeed * tan(angle) = 50 * 0.0555 = 2.775
Это пройденный перпендикулярный путь за 1 сек, с учетом ускорения еще двойка, итого 2.775 * 2
F = 5.55
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Не за 1 сек., а за 1 тик, то есть за 1/60 сек.
То есть ускорения 10 сильно не хватит, что показал и прикидочный расчёт выше.
Давайте разберемся. Мы вычислили "угол на тик" и множим на него (тангенс) CurrentSpeed, который в м/сек. Значит и перпендикулярную скорость мы получаем в м/сек, и ускорение/силу. Понятно что эта сила прилагается в течение 1/60, но угол поворота достигается.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Простая прикидка:
Пусть нам нужно развернуть объект не на 90, а на 180 гр. с радиусом 15 м. Значит объект проходит половину окружности 2*Pi*R/2 = Pi*R ~ 50м, при скорости 50 м/с это 1 секунда на весь разворот, то есть только по оси X скорость за секунду меняется с 50 на -50, то есть на 100 м/с, а у нас ускорение 10 м/с.
Это если бы мы направили ускорение противоположно скорости и тупо вычитали. Тогда да, нам бы понадобилось 5 сек чтобы обнулить скорость X и еще 5 чтобы достичь противоположной. Но при повороте (вращением вектора) мы скорость не гасим
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Если нужно посчитать этот угол,
Хотелка. Вот этот "радиус поворота" мне упорно не нравится. Ну а если сила просто мала по сравнению с текущей скоростью? Тогда поворот выполняется напр час и больше. Сила что-то пытается сделать, но мощности нет. И (реальный) радиус будет напр километр. Логично предложить юзеру поведение "чем больше сила тем круче она поворачивает", просто прилагая все ускорение перпендикулярно. И тут возникает необходимость в ограничении угла поворота, когда вектор скорости наоборот, слишком мал по сравнению с силой.

Пример: скорость = 0, и объект может двигаться только по оси X, а требуется по Z. Нужно, разворачивая вектор скорости, вырулить на требуемое направление (0, 0, 1). Задаем макс угол, напр 30. Все хорошо, на первом шаге напр-е вектора скорости = (0.866, 0, 0.5), и вращаем его до нужного. Только вот мелкая неприятность: при разных симуляциях с разными dt поведение не воспроизводимо. Как порешать?
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
01.02.2026, 17:02
Цитата Сообщение от Igor3D Посмотреть сообщение
Это если бы мы направили ускорение противоположно скорости и тупо вычитали. Тогда да, нам бы понадобилось 5 сек чтобы обнулить скорость X и еще 5 чтобы достичь противоположной. Но при повороте (вращением вектора) мы скорость не гасим
Нет. При полностью противоположном направлении приложения силы мы быстрее всего достигнем результата, ведь при плавном повороте вдоль оси X ориентирована только часть вектора силы, которая меньше всей силы.
Я вообще не пойму, в чём проблема. Ведь у нас не машина, а условный шарик. Ну, не хватает нам 10 м/с, можно дать 200, кто мешает? Нужно, чтобы он разворачивался за одинаковое время, независимо от скорости? Можно сделать рулящую силу пропорциональной текущей скорости. Но вообще - это нормально, что про больших скоростях повороты выходят медленнее.

Цитата Сообщение от Igor3D Посмотреть сообщение
Пример: скорость = 0, и объект может двигаться только по оси X, а требуется по Z. Нужно, разворачивая вектор скорости
Тут вектор скорости нулевой длины, у него нет направления, его не нужно разворачивать, сразу можно начинать движение в нужную сторону.
1
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
01.02.2026, 20:18  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Мы вычислили "угол на тик" и множим на него (тангенс) CurrentSpeed, который в м/сек. Значит и перпендикулярную скорость мы получаем в м/сек, и ускорение/силу. Понятно что эта сила прилагается в течение 1/60, но угол поворота достигается.
Нет, не достигается, именно потому что сила прилагается лишь один тик
CurrentSpeed += Acceleration * dt
Выходит нужно иметь Acceleration = 2.775 * 60 = 166.5 чтобы довернуть вектор силы на 3.15 градуса за один тик (совпадает с Вашей центростремительной силой). Ну и "на глазок": если разгонялись 5 сек то сделать полный оборот за 1.9 сек явно нереально
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Я вообще не пойму, в чём проблема. Ведь у нас не машина, а условный шарик. Ну, не хватает нам 10 м/с, можно дать 200, кто мешает? Нужно, чтобы он разворачивался за одинаковое время, независимо от скорости? Можно сделать рулящую силу пропорциональной текущей скорости. Но вообще - это нормально, что про больших скоростях повороты выходят медленнее.
Ну это параметры для юзверя, хотелось бы естественности/натуральности
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Тут вектор скорости нулевой длины, у него нет направления, его не нужно разворачивать, сразу можно начинать движение в нужную сторону.
Тут я немного вышел за рамки стартового поста (в др свою тему "Движение лицом вперед"). Да, скорость нулевая, но есть constraint - допустимое направление движения (с каким-то отклонением). Напр автобус не может сразу поехать перпендикулярно его "оси"
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
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 км/ч. Да, но вот с поворотом
Поворот на 120 градусов муха выполняет за 80 миллисекунд
Ньютон отдыхает. Ну и, как всегда, наука этого не объясняет
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
02.02.2026, 19:40
Цитата Сообщение от Igor3D Посмотреть сообщение
Поворот на 120 градусов муха выполняет за 80 миллисекунд
Цитата Сообщение от Igor3D Посмотреть сообщение
Ньютон отдыхает. Ну и, как всегда, наука этого не объясняет
Не написано же, что это делается на крейсерской скорости. Кроме того, муха - это не только "двигатель", но ещё и "планер". Поворачивать можно без траты сил, за счёт аэродинамики.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
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
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
07.02.2026, 17:26
Цитата Сообщение от Igor3D Посмотреть сообщение
прилагать силу перпендикулярно текущей скорости возможно и нужно когда требуется плавный поворот вектора скорости (движение "лицом вперед")
К движению "лицом вперёд" это никак не относится. Приложение силы F перпендикулярно текущей скорости перенаправляет вектор скорости объекта, но не разворачивает сам объект. Для этого нужно ещё приложить момент силы и ввести для объекта понятие момент инерции (а в 3D правильнее тензор).
Цитата Сообщение от Igor3D Посмотреть сообщение
иметь такую "мега-силу" обычно невыгодно
Что значит "невыгодно"? За включение в движке силы нужно платить? И когда это "обычно"?
Цитата Сообщение от Igor3D Посмотреть сообщение
Лучше выглядит использование Brake что гасит текущую скорость (компоненту не совпадающую с требуемой).
Чем лучше? Вы в курсе, что Brake - это тоже сила, в результате она сложится с той самой Acceleration и, если мы добились поворота без изменения скорости, это значит, что их сумма получилась как раз равной той самой предложенной мной перпендикулярной силе F. А так как между Brake и Acceleration угол больше прямого, это значит, что они обе больше той самой F, но почему-то их применять выгодно, а F - невыгодно.
Цитата Сообщение от Igor3D Посмотреть сообщение
полученный вектор обрезаем до MaxSpeed
А это ещё что такое? Говоря "обрезаем", мы тем самым утверждаем, что мы плюём на то, что там получилось в физ расчётах, и устанавливаем скорость вручную. Но тогда зачем вообще эта возня с физикой, которая не используется? Можно же просто сразу устанавливать нужную нам скорость.
Цитата Сообщение от Igor3D Посмотреть сообщение
Проблему с гравитацией это не решает
Какую проблему? Мы наплевали на физику, но хотим чтобы она работала?
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
07.02.2026, 18:56  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
К движению "лицом вперёд" это никак не относится. Приложение силы F перпендикулярно текущей скорости перенаправляет вектор скорости объекта, но не разворачивает сам объект. Для этого нужно ещё приложить момент силы и ввести для объекта понятие момент инерции (а в 3D правильнее тензор).
Надо скормить движку момент инерции, он сообщает объекту угловую скорость что работает так же как линейная (сама собой не иссякнет и.т.п). Это само собой. Но в любом случае нужно плавное изменение вектора скорости чтобы сонаправить с ним "лицо/face".

Кстати тут еще проблемный случай. Возможен вариант когда текущая скорость совсем не совпадает с направлением face (другие силы не запрещены). Что предложите для такого случая?

Цитата Сообщение от Mikle Quits Посмотреть сообщение
Вы в курсе, что Brake - это тоже сила, в результате она сложится с той самой Acceleration и, если мы добились поворота без изменения скорости, это значит, что их сумма получилась как раз равной той самой предложенной мной перпендикулярной силе F. А так как между Brake и Acceleration угол больше прямого, это значит, что они обе больше той самой F, но почему-то их применять выгодно, а F - невыгодно.
Простые примеры расчетов выше показывают что если используем только Acceleration - оно должно быть гигантским для реальных разворотов (даже скромных, не говоря о супер-мухе). Нужно тормозить, сбрасывать неугодную нам компоненту скорости. Никакой физике это не противоречит.
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Говоря "обрезаем", мы тем самым утверждаем, что мы плюём на то, что там получилось в физ расчётах, и устанавливаем скорость вручную. Но
Тут Вас трудно понять, в реальной жизни скорость всегда ограничена. Возможно я неточно выразился, обрезаем конечно вектор силы (так чтобы скорость не превысила макс), скорость напрямую никогда не трогаем
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Какую проблему? Мы наплевали на физику, но хотим чтобы она работала?
Почему/чем наплевали? Вас смущает что все "слишком просто" и значит "неправда"? (обычная реакция). Нужно чтобы было заумно и задрочено, вот тогда "физика"! Может Вы полагаете что фрагменты что Вы приводили "более физичны"? Уверяю что это не так, стоит лишь слегка "копнуть"

Проблема. Пример. Вот управляли объектом, и он упал с горы/обрыва. Или подпрыгнул на кочке. Вот тут-то (в полете) тормозить (и убивать гравитацию) точно не надо. А может и ускорение не прилагать. Я предполагаю что Вы ответите, но все-таки постарайтесь не быть банальным Спасибо
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
07.02.2026, 19:22
Цитата Сообщение от Igor3D Посмотреть сообщение
Возможен вариант когда текущая скорость совсем не совпадает с направлением face (другие силы не запрещены). Что предложите для такого случая?
А как нужно? Оно то и в жизни бывает, что машину занесло, человек идёт приставным шагом.
Чтобы получить ответ, нужно полностью поставить условия задачи.
Цитата Сообщение от Igor3D Посмотреть сообщение
Простые примеры расчетов выше показывают что если используем только Acceleration - оно должно быть гигантским для реальных разворотов (даже скромных, не говоря о супер-мухе). Нужно тормозить, сбрасывать неугодную нам компоненту скорости. Никакой физике это не противоречит.
Я не писал про противоречие. Я пытался понять, что значит "невыгодно" в контексте задачи.
И ещё раз утверждаю: F - это как раз сумма (векторная) Brake и Acceleration, если нужна "запредельная" F, значит и Brake и Acceleration нужны такие же запредельные.
Цитата Сообщение от Igor3D Посмотреть сообщение
Нужно тормозить, сбрасывать неугодную нам компоненту скорости. Никакой физике это не противоречит.
Во-первых, торможение, это снижение не неугодной, а вообще скорости, какая есть. Точнее, её компоненты, перпендикулярной нормали к поверхности. Торможение - это частный случай силы реакции опоры.
Во-вторых, про противоречие я написал про фразу "полученный вектор обрезаем до MaxSpeed". Вот так прямо берём, и обрезаем? Что-то многовато вышло?
Цитата Сообщение от Igor3D Посмотреть сообщение
Вас смущает что все "слишком просто" и значит "неправда"? (обычная реакция)
О. Психолог детектед.
Я конкретно пишу, что "смущает". Там нигде не написано "слишком просто". Не нужно за меня додумывать.
Цитата Сообщение от Igor3D Посмотреть сообщение
Вы полагаете что фрагменты что Вы приводили "более физичны"? Уверяю что это не так, стоит лишь слегка "копнуть"
Ну так копните, интересно.
Но я не призываю к физичности, я призываю определиться, как требуется, чтобы было. Можно и нефизично - просто анимировать движение объекта по любой траектории, которая нравится, но тогда не нужно физику приплетать.
Цитата Сообщение от Igor3D Посмотреть сообщение
Пример. Вот управляли объектом, и он упал с горы/обрыва. Или подпрыгнул на кочке. Вот тут-то (в полете) тормозить (и убивать гравитацию) точно не надо. А может и ускорение не прилагать.
Потому, что торможение вообще не надо сюда приплетать, точнее, применять его, когда объект тормозит.
Ещё один, 1485-й раз: условия задачи не заданы.
Цитата Сообщение от Igor3D Посмотреть сообщение
предполагаю что Вы ответите, но все-таки постарайтесь не быть банальным
А правильные ответы - они банальны. Небанально вам какой-нибудь стендапер ответит.
Цитата Сообщение от Igor3D Посмотреть сообщение
Спасибо
Пожалуйста.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
09.02.2026, 17:58  [ТС]
Погуглил, поразмышлял. Оказывается я неправильно понимал базовые вещи Ошибка в том что я пытался приспособить Acceleration для поворота, прилагал его перпендикулярно скорости и.т.п. Ничего этого в жизни нет. Пример: велосипедист. Acceleration - это как он крутит педали, разгоняя велик (впрочем может и тормозить). Вот он набрал скорость и поворачивает на 90, педали при повороте обычно не крутит, т.е. Acceleration = 0. Поворот успешно выполняется, важна текущая скорость и без разницы сколько до нее разгонялся, хоть час.

То есть поворот достигается "рулением", поворотом колес. Лезть туда дальше (круг трения и все такое) пока не видно смысла. Но ряд позиций поменялся

- я (ошибочно) полагал, что чем мощнее сила (больше Acceleration) - тем быстрее выполнится поворот (на той же скорости). Это не так, сила может не менять скорость вообще, но уметь "рулить" менять напр-е движения

- на бОльших скоростях и радиус поворота больше - оказывается тоже неверно. До определенной скорости (типа штатное, безаварийное движение) радиус поворота одинаков на разных скоростях и определяется углом поворота руля/колес. Нашел калькулятор, хотя видел и другой (рез-ты разные). Если же скорость превысит предел - наступает скольжение и далее переворот.

- а как же старикашка Ньютон? Ведь чтобы изменить вектор скорости (1, 0, 0) -> (0, 0, 1) нужно же приложить силу, сам собой вектор скорости не изменится. Честно говоря: не знаю. Но велосипедист же педали не крутит и сил вроде не прикладывает, а при повороте руля вектор скорости меняется. Остается предположить/уповать что "конструкция колеса так делает". Кстати должна быть заметная потеря энергии. А с "наклоном" объекта при повороте вроде понятно

Все это конечно хорошо, пусть юзверь задал радиус поворота объекта. И как считать шаг симуляции?
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
09.02.2026, 20:55
Цитата Сообщение от Igor3D Посмотреть сообщение
Оказывается я неправильно понимал базовые вещи
И неправильное понимание ещё остаётся.
Цитата Сообщение от Igor3D Посмотреть сообщение
- а как же старикашка Ньютон? Ведь чтобы изменить вектор скорости (1, 0, 0) -> (0, 0, 1) нужно же приложить силу, сам собой вектор скорости не изменится. Честно говоря: не знаю.
Я уже неоднократно писал - сила реакции опоры, сила трения - это тоже полноценные силы. При повороте действует сила реакции опоры, она направлена перпендикулярна колесу, поэтому она не совершает работу (то есть не меняет кинетическую энергию объекта). А, если сила не совершает работу, она может действовать вечно, при этом НИЧЕГО НЕ ТРАТИТСЯ. Хороший и понятный пример - сила тяжести. Гиря лежит на полу и давит, действует на пол с силой тяжести. Она же не "устанет" давить на пол, сколько бы времени не прошло?
Поэтому:
Цитата Сообщение от Igor3D Посмотреть сообщение
я (ошибочно) полагал, что чем мощнее сила (больше Acceleration) - тем быстрее выполнится поворот (на той же скорости)
Именно так и есть! Только название этой силы - не Acceleration.
1
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
10.02.2026, 17:27  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Цитата Сообщение от Igor3D Посмотреть сообщение
я (ошибочно) полагал, что чем мощнее сила (больше Acceleration) - тем быстрее выполнится поворот (на той же скорости).
Именно так и есть! Только название этой силы - не Acceleration.
Наверно это центростремительная (или центробежная, хз) сила - но в любом случае это не та сила которой я должен управлять/поддерживать (как Acceleration = велосипедист крутит педали). "Поворачивающая" сила выходит/получается сама собой и зависит от скорости и радиуса.

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

Не по теме:

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

0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
10.02.2026, 20:51
Цитата Сообщение от Igor3D Посмотреть сообщение
Считается что трение покоя достаточно велико чтобы полностью сожрать вторую силу
Цитата Сообщение от Igor3D Посмотреть сообщение
как посчитать симуляцию?
Если мы считаем, что силы трения априори хватает, то просто поставить колёса, как я давал рисунок выше - и машина пойдёт по высчитанному радиусу, никаких угол/шаг_симуляции вычислять не понадобится.

Цитата Сообщение от Igor3D Посмотреть сообщение
Наверно это центростремительная (или центробежная, хз) сила - но в любом случае это не та сила которой я должен управлять/поддерживать
Да, это центростремительная сила, получается как сумма гравитации и силы реакции опоры.
Но вычислять её не нужно - в природе (и в физ движке) она возникает сама.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
11.02.2026, 13:59  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Если мы считаем, что силы трения априори хватает, то просто поставить колёса, как я давал рисунок выше - и машина пойдёт по высчитанному радиусу, никаких угол/шаг_симуляции вычислять не понадобится.
Мне нужно на каждом шаге вычислять прилагаемую силу(ы) и отдавать ее движку, "просто поставить" я не могу. Имеем такие вектора

v - текущая скорость
face - направление "вперед"
dir - требуемое направление

Требуется посчитать F - прилагаемую силу на интервале dt. Заметим что вектора v и face могут и не совпадать, из-за воздействия др сил объект может двигаться "юзом".

Не по теме:

Кстати машинки в движке (vehicles) учитывают возможное скольжение и переворот

0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
11.02.2026, 17:34
Мы ходим по кругу - это уже было, просто перпендикулярная к текущей скорости сила. И это не импульс, её не нужно вычислять на каждом dt, её надо просто задать, а когда поворот произойдёт - убрать. Она не зависит от тайминга.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,114
Записей в блоге: 2
11.02.2026, 22:16  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Мы ходим по кругу - это уже было, просто перпендикулярная к текущей скорости сила. И это не импульс, её не нужно вычислять на каждом dt, её надо просто задать, а когда поворот произойдёт - убрать. Она не зависит от тайминга.
Если "просто задать" (силу) то радиус выходит разный на разных скоростях
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 529
11.02.2026, 22:43
Цитата Сообщение от Igor3D Посмотреть сообщение
Если "просто задать" (силу) то радиус выходит разный на разных скоростях
А должен быть одинаковый - тогда надо задавать силу, пропорциональную по модулю текущей скорости.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2026, 22:43

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
79
Ответ Создать тему
Новые блоги и статьи
сукцессия 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), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru