Сила (по Ньюьону и без)17.12.2015, 16:43. Показов 1513. Ответов 38
Метки нет (Все метки)
Здравствуйте
Есть 3D объекты имеющие массу. Есть движок физики, которому я могу сообщать "силы" (вектора) в результате которых объекты могут двигаться. Пример: юзер включил силу: направление по оси X и величина напр 10. В рез-те объекты движутся с ускорением 10. Сила действует по Ньютону (F = m * a). Чтобы масса не путалась под ногами положим ее = 1 (это домножение на константу). Все хорошо. Предположим так сила прилагается в течение 2 секунд, в рез-те объект приобрел скорость v = (20, 0, 0). Теперь юзер меняет направление силы - она уже действует по Y. Еще через 2 сек v = (20, 20, 0). Это абсолютно корректный рез-т по первому закону Ньютона. НО... он не устраивает юзера. "Чего это объект летит по диагонали? Я силу направил вверх, мне НАДО чтобы он вверх и полетел". Др словами надо гасить инерцию, полностью или частично. Это соответствует тому что объект как бы "активен", типа самолетик умеющий тормозить и.т..п. В приведенном примере гашение выглядит очень просто - да приложим доп силу против текущего вектора скорости (ну точнее против его компоненты не совпадающей с текущим направлением силы). Увы, так нельзя по 2 причинам: 1) Сил может быть сколько угодно, поэтому одна не должна давить все 2) Текущий вектор скорости конечно всегда известен, но он может не иметь ничего общего с приложенными ранее силами. Если напр объект уперся в препятствие то его скорость ноль, а если отскочил - скорость вообще направлена в др сторону. Этим занимается движок, менять скорость напрямую хотя и можно, но ничего хорошего не дает, грамотно прилагать силы. Прошу поделиться соображениями (хотя бы и сырыми). Не по теме:
С уважением Игорь
0
|
|
| 17.12.2015, 16:43 | |
|
Ответы с готовыми решениями:
38
Гравитационное поле. Сила тяжести. Первая космическая сила. Как понять? Сила тертя і сила пружності Сила тока... |
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||
| 27.12.2015, 13:13 | ||
|
Используя руль и трение, можно повернуть под прямым углом - с околонулевым радиусом поворота. Для этого достаточно задать трение ноль в направлении руля и трение бесконечность в направлении, перпендикулярном рулю.
0
|
||
| 27.12.2015, 14:05 [ТС] | |||
Но вот я что-то не вполне понимаю как это сделать. Попробуем "формализоваться". Есть1) Текущий вектор силы - по сути ускорение м/сек^2 2) Текущий вектор скорости м/сек 3) Какой-то еще параметр силы регулирующий крутизну поворота 4) Частота движка, напр 30 fps Как изменить текущий вектор силы так чтобы учесть "поворот"?
0
|
|||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
|
| 27.12.2015, 14:35 | |
|
3)
Есть угол, задающий ориентацию руля. Угол управляется пользователем. Есть сила стрения, пропорциональная скорости. Есть два коэффициента пропроциональности - "вдоль" и "перепендикулярно". Вы можете считать, что ориентация руля и направление силы - это одно и то же. Но в общем случае, парусник может плыть и против ветра. Добавлено через 2 минуты Раскладываем вектор скорости на "вдоль" и "перепендикулярно" рулю. Вычисляем вектора силы трения в данных направлениях. Складываем и получаем вектор силы трения.
0
|
|
|
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
|
|||
| 27.12.2015, 14:50 | |||
|
0
|
|||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||
| 27.12.2015, 15:04 | ||
|
Странно, что Вы об этом спрашиваете. У бутерброда сопротивления в разных направлениях (относительно бутерброда) не меняются (если только он не начал разрушаться).
0
|
||
| 27.12.2015, 15:44 [ТС] | |||||||
0
|
|||||||
|
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
|
||
| 27.12.2015, 17:45 | ||
|
0
|
||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||
| 27.12.2015, 19:24 | ||
|
0
|
||
| 28.12.2015, 13:04 [ТС] | ||||
|
0
|
||||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||
| 28.12.2015, 13:37 | ||
|
2. Домножить один из этих двух векторов на одну константу, а другой - на другую. 3. Сложить два получившихся вектора. Какой именно из этих трёх пунктов вызывает у Вас затруднения?
0
|
||
|
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
|
||
| 28.12.2015, 14:17 | ||
|
Добавлено через 2 минуты хотите плавно, "трите" трением только этот вектор.
0
|
||
| 28.12.2015, 14:36 [ТС] | ||||
Логичнее ожидать что малые скорости погасятся быстрее. А что делает 2-й коэффициент - вообще не понимаю. "Вдоль руля" - надо просто добавлять вектор ускорения, чего ту множить?
0
|
||||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||||||
| 28.12.2015, 16:34 | ||||||
|
Я предложил самый простой вариант - сопротивление пропорционально скорости. А если послушать физиков, то нужно брать квадрат скорости. Но Вы можете выбрать любую другую зависимость, которая Вам понравится. Всё равно физика у Вас намечается слабо похожая на настоящую ("Сила бездействует (ускорение ноль) если проекция скорости на направление силы превышает заданный предел").
0
|
||||||
| 28.12.2015, 17:42 [ТС] | |||
|
Пример: скорость была (100, 0, 0) теперь сила (величиной 10 м/c*c) изменила напр-е вверх. Коэффициенты 0.5 и 0. Наверное Вы имели ввиду вектор ускорения (-50, 10, 0). Но это ведь "метры в секунду". При интеграции в скорость (v += a * dt) получится (100, 0, 0) + (-50, 10, 0) / 30 // текущий шаг движка 30 fps Во-первых результаты принципиально разные для разных fps, а во-вторых время разворота может оказаться гораздо большим чем желает юзер.
0
|
|||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,885
|
||||||
| 28.12.2015, 18:53 | ||||||
|
0
|
||||||
|
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
|
||
| 28.12.2015, 23:35 | ||
|
Igor3D
F = текущее ускорение Finput = нормализованный вектор в ту сторону куда должен полететь корабль (например нажал пользователь вправо, вектор вправо) Fnorm = нормализовать F Fscale = скалярное ускорение F = (Fnorm + Finput) * Fscale В итоге НЛО будет рулить в ту сторону в которую жмет пользователь, скорость руления зависит от набранной скорости и ускорения. Добавлено через 3 часа 53 минуты
0
|
||
| 29.12.2015, 15:41 [ТС] | |
|
Сила - это вектор ускорения, во всяком случае с точки зрения ее применения. Направление вектора силы может задаваться всяко-разно юзером в зависимости от типа силы и.т.п. А вот модуль (величина) ее в любом случае задается. Пусть юзер задал величину ускорения 10 (тот же исходный пример)
Что мне не нравится в схеме с "трением компоненты" - ее полная "нефизичность". Ускорение 10 - ну какой-то скромный моторчик. Но с др стороны при k = 0.5, v = 100 эта же сила лихо тормозит создавая ускорение минус 50. Что за странный моторчик такой? С др стороны если текущая скорость мала (напр 5) то мы тормозим минус 2.5, хотя "моторчик 10" с гашением такой малой скорости мог бы справиться быстрее. Не по теме: Впрочем я уже потерял интерес к обсуждению - не видно ни одной идеи, повторяется одно и то же "множим на коэффициент"
0
|
|
|
99 / 46 / 18
Регистрация: 09.08.2015
Сообщений: 367
|
|||||
| 29.12.2015, 18:21 | |||||
|
0
|
|||||
| 05.01.2016, 12:04 [ТС] | |
|
Ладно, попробуем др вещь, из той же оперы, может тут лучше пойдет.
Есть сила прилагаемая к телу и заданная "точкой цели", др словами есть мишень, которая в любом случае имеет позицию в пр-ве (которая может и сама двигаться), но может и принадлежать поверхности и иметь нормаль. При отсутствии др сил тело движется к мишени по прямой с заданным ускорением. Как и в предыдущем случае макс скорость ограничена. Вопрос: что делать при достижении мишени? Не надо связывать это с "давит на клавишу/джойстик" - представим себе напр 100 объектов у каждого из которых свой "target". Как этим удобно управлять, какой ф-ционал дать юзеру? Здесь нет привязки к какой-то одной, конкретной сцене, но есть типовые ситуации которые хотелось бы обсудить.
0
|
|
| 05.01.2016, 12:04 | |
|
Помогаю со студенческими работами здесь
39
Сила трения Сила трения сила инерции Сила трения В чем сила C#? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|