Параметры объекта "сила"05.10.2025, 20:29. Показов 3280. Ответов 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
Сила (по Ньюьону и без) Как отличить часть объекта от собственности объекта? Получить необходимый объект по параметру |
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,851
|
|
| 05.10.2025, 22:28 | |
|
Да вроде там никто не назначает вот так лихо новую скорость, обычно в игровых движках по другому действуют
0
|
|
|
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 274
|
||
| 05.10.2025, 22:36 | ||
|
Более чем достаточно в каждый момент итерации для каждого нужного действия прикладывать вектор к объекту. Прикладывание усех векторов к объекту и расчет векторной суммы это и есть суть и цель рассчета выполняемого в итерации. =). и ничего больше
0
|
||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,851
|
|
| 05.10.2025, 22:43 | |
|
0
|
|
| 05.10.2025, 23:18 [ТС] | |||
|
v = (1, 0, 0) v + a * dt = (1, 0.05, 0) v + a * dt = (1, 0.1, 0) и.т.д. Скорость по X остается
0
|
|||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,851
|
|||
| 05.10.2025, 23:44 | |||
|
идея в том, что вы действительно должны складывать вектора и тактировать их по времени, тикрейты вроде у нас называются, но я не уверен в названии, уверен в идее, там кстати интерактивный учебник, вы можете сами поводить мышкой и посмотреть что происходит Добавлено через 17 минут
1
|
|||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,851
|
|
| 06.10.2025, 06:11 | |
|
чтобы избавиться от инерции достаточно прейти в другую систему отсчёта
0
|
|
| 06.10.2025, 15:26 [ТС] | ||||
(вообще Рейнольдс - гениальный чувак). Да, но контроля-то нет, а он нужен, напр муха развернется и полетит в нужном направлении гораздо шустрее чем тяжелый автомобиль. Ваши предложения?
0
|
||||
| 08.10.2025, 23:44 [ТС] | ||||
|
Так, ну все как обычно: тыцнул ссылкой - и убежал
. А поговорить, обсудить? Пусть ссылка забылась или вообще не смотрел - ну в данном случае минут за 10 все можно освоить. Иначе какой смысл накачивать такую "эрудицию"?Кое-что уточним.
Попробуем сформулировать "с примером"
Это вполне конкретная, инженерная задача. Распускать хвост с "большой физикой" тоже не нужно (если уж мы называет игровые рецепты "теорией"). Пусть лучше не будет ответов чем отписываться на какой-то собачий бред. Спасибо за понимание
0
|
||||
|
|
||||
| 16.12.2025, 17:17 | ||||
|
Основная проблема этой темы для меня — это непонятный контекст задачи. Так сказать, XY-проблема — ощущение, что формулируется не та задача, которая на самом деле ТС волнует.
Поэтому я зайду издали. Есть, грубо говоря, два подхода при моделировании движения: 1) отталкиваемся от кинематики, чтобы движение выглядело красиво, а динамику подводим задним числом. Это путь анимирования элементов на сайте, движения менюшечек в играх (выпадающее меню в warcraft, падающие квадратики с сообщениями-событиями в total war). Здесь можно сделать красивую картинку, визуально эстетичную, с простыми формулами, без нагрузки на машину. Ярким примером этого подхода является реализация самонаводящихся ракет «как в аниме». 2) отталкиваемся от динамики, чтобы были заданы «правила игры» мира, чтобы все игроки и NPC им в равной мере следовали. Рассмотрим этот вариант подробнее. Вот, к примеру, обсуждение реализации физики гоночных игр (см. также комментарии к статье). Краткий вывод: даже для простой 2D гонки нужно хотя бы в базовых очертаниях представлять распределение сил в автомобиле, колёсах, подвеске. Иначе будет не гонка с заносом и дрифтом, а катание водомерок по водной глади в декорациях гоночной трассы. Ещё один момент: поскольку в рамках этого подхода мы задаём универсальную динамику, которой подчинены все агенты (игрок, NPC, прочие предметы), то в игре с необходимостью возникает потребность в «ИИ», который будет решать обратную задачу. Например, если мы реализовали движение с инерцией, то боты должны понимать, как двигаться к выбранной цели: когда необходимо разгоняться, когда притормаживать и т.п. Можно попытаться эти два компонента совместить воедино, но скорее всего или решение сведётся к кинетической модели, а динамика — сбоку бантик, или высокий риск накосячить. Собственно, эта мысль уже была озвучена: По приведённой выше ссылке находится частное решение такой обратной задачи, а именно: предлагается расчёт силы, которую нужно прикладывать к телу, чтобы оно двигалось к точечной цели. При этом считается, что никаких других сил нет, т.е. агент (игрок, бот) имеет полный контроль над силой. По моему мнению эта статья хорошая. Не по теме:
Итак, открытый вопрос: что именно мы хотим достичь из того, что в статье не было разобрано? В чём проблема? Какой контекст задачи? Без внятного ответа на них мне сложно ответить конкретнее и предметнее.
1
|
||||
| 16.12.2025, 20:12 [ТС] | |||||
|
Пример: анимация колобка (создавал и такую тему). С кинематикой проблем нет, мы легко можем заставить объект двигаться куда надо на заданном интервале времени, для этого в любом 3D приложении есть линейка времени, кейфреймы, сплайны (Безье и другие) и еще много чего. Увы, реалистичным такое движение не будет Напр если колобок катится по неровной поверхности, да хотя бы спускается по ступенькам - придется долго пыль глотать всего лишь для того чтобы он нормально контактировал с землей/поверхностью. Не говоря уже о всяких там подскоках и.т.п. Конечно добиться чего-то приемлемого можно, но это кропотливо/трудоемко, а в итоге совсем не то чем можно гордиться.С др стороны, движок обеспечивает реалистичность "на раз". Просто "уронил" того колобка на поверхность, он и покатился, возможно как-то подпрыгивая, контакт с полом достигается гравитацией, с реализмом все отлично! Да вот беда - управления-то никакого, он катится куда хочет Надеюсь цель понятна, теперь важные нюансы
0
|
|||||
|
|
||||||||
| 16.12.2025, 22:00 | ||||||||
|
Во-первых, в статье определяется класс Vehicle, который реализует методы update (физика — законы динамики), seek (логика агента — где его цель и как он к ней намерен двигаться), show и др. Тут намешаны разные слои (физический движок, логика агента, представление) в пределах одного класса, но они чётко разделены по методам. Если рассматривать только метод seek, который отвечает за поведение агента, то можно сказать, что рассматривается вариант, когда агент полностью определяет силу. Во-вторых, мы можем обобщить это решение на случай, когда помимо силы, которой агент управляет, есть сторонние силы (например, гравитация). В-третьих, при наличии сторонних сил может случиться, что ни при каких устанавливаемых агентом силах он не сможет попасть в заданную цель (например, если гравитация превосходит мощность двигателя). В-четвёртых, может случиться, что при выбранной реализации функции seek агент попадёт в заданную точку позже, чем мог бы при альтернативной реализации этой функции, или же придёт по хитрому пути. В любом случае, этот исход полностью определяется тем, как задана зависимость силы, которой агент управляет, от времени/состояния/положения других объектов/др. Так? Если убрать интерактив, то это поведение похоже на требуемое? Если да, то задача состоит в том, чтобы дать пользователю набор параметров, которые захардкожены в их решении.
0
|
||||||||
| 16.12.2025, 23:13 [ТС] | |||
|
По поводу анимационных кривых. Напр сила имеет параметр Acceleration (ускорение). Известно общее время анимации, напр 10 сек. Значения Acceleration могут меняться юзером на этом интервале времени, напр A = 10 для времени t = 0 сек, A = 5 для t = 2 и.т.д. Переход между значениями (плавно, скачком и др) также задается, в любом случае на тике симуляции известно текущее ускорение
0
|
|||
|
|
||||||
| 17.12.2025, 00:53 | ||||||
|
Возьмём за основу код, предложенный по ссылке, абстрагируем его.
Итак, метод параметризован следующими параметрами: 1. maxforce — максимальное ускорение (макс. сила), которое может быть у агента; 2. maxspeed — максимальная скорость, которая может быть у агента; 3. distToSlow — расстояние до цели, начиная с которого вместо тактики «гони что есть мочи» используется тактика «плавно опускаем скорость до нуля по мере приближения к цели». Все три параметра можно варьировать.
0
|
||||||
| 17.12.2025, 15:37 [ТС] | |||
|
Код ниже будет гасить инерцию, это достигается вычитанием вектора текущей скорости Откуда берется этот (нехороший) эффект - легко понятно, за счет вычитания вектора скорости, которая создается всеми силами, в том числе и гравитацией. Др словами мы просто не даем гравитации "уронить" объект на поверхность Как с этим бороться?
0
|
|||
|
|
||
| 17.12.2025, 21:28 | ||
|
Так-то в приведённом мною коде никакой гравитации нет, как и любых других сторонних сил (трение, вязкость, притяжение и т.п.). В целом мне не понятно, с чего бы это объект должен роняться на поверхность, если цель этого объекта — достичь определённой точки, которая находится где-то… где-то в воздухе, наверное.
0
|
||
| 18.12.2025, 00:46 [ТС] | ||||
|
0
|
||||
|
|
||||
| 18.12.2025, 01:39 | ||||
|
Товарищ подсудимый, вы путаетесь в своих показаниях
![]() 1. Мы хотим реализовать динамику, чтобы колобок катился-прыгал по неровной поверхности более-менее реалистично? 2. Мы хотим при реализованной динамике управлять колобком, чтобы он с учётом действующих внешних сил двигался к точечной цели? 3. Мы хотим что-то третье? Последний контрольный вопрос: в приведённых видеофайлах используется собственный движок (реализация динамики/физики) или сторонний? Он работает отлаженно и хорошо, или же по его работе тоже есть вопросы, которые касаются обсуждения в данной теме?
0
|
||||
| 18.12.2025, 16:47 [ТС] | ||||
|
0
|
||||
|
|
||||||
| 19.12.2025, 14:09 | ||||||
|
В рамках одной темы невозможно заниматься всеми компонентами настолько сложной системы. Давайте будем считать, что движок, реализующий динамику (уравнения движения, гравитацию, трение и т.п.), уже реализована. Я так понял, уже используется Bullet (не знаком с таким). Можно ли считать, что то написанное мною выше — правда, а вместо процитированного сообщения должно быть:
А ещё я предлагаю сначала поставить и решить задачу в 2D. Это проще сделать и проще обсуждать.
0
|
||||||
| 19.12.2025, 14:09 | |
|
Помогаю со студенческими работами здесь
20
Оценка параметров объекта по изображению Сегментация карты глубины на объекты. Определение параметров объектов Построение силовых линий Генерация случайного сильно связанного орграфа Метод грубой силы при обработке графов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-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, то после закрытия окошка. . .
|