Как рассчитать силы, оказываемые натянутой проволокой, оборачивающей 2D-объекты?


10

Предположим, у меня есть физический примитив, который я собираюсь назвать «проводом», обернутый вокруг 2D-среды (как описано в этом вопросе ).

Вот иллюстрация того, как это может выглядеть:

проволока, намотанная на статические и динамические игровые объекты

В примере на рисунке: коробка тянется вверх (удерживается) за провод, а коробка тянет провод вниз. Объект на пружине выталкивается проволокой вниз, но также подталкивает проволоку вверх.

Хотя я еще не понял, как это реализовать, предположим, что провод будет свободно скользить по точкам, вокруг которых он намотан.

В двумерном физическом моделировании (т.е. основанном на кадре), как вы рассчитываете силы (или импульсы), чтобы применить к объектам, которые прикреплены или обернуты проволокой, как это?


Как я упоминал в своем первом вопросе , я представляю, что если бы единственным нестатическим объектом «на» проводе была масса на конце, то сила была бы идентична соединению фиксированной длины между массой и точкой до что на проводе.

Ответы:


9

Коробка, тянущая за провод, оказывает натяжение на провод. Напряжение - это сила, измеренная в ньютонах. Если мы сделаем некоторые упрощающие предположения (без трения между проволокой и окружающей средой), то натяжение будет одинаковым во всех точках вдоль проволоки.

Если мы рассмотрим ваш пример как статичный, то натяжение проволоки - это просто вес коробки:

T = m * g

где m - масса коробки, а g - ускорение под действием силы тяжести (т. е. 9,8 м / с ^ 2). Обратите внимание, что это действительно только в статическом случае, см. Ниже объяснение того, как рассчитать его в динамическом случае.

Сила при каждом изгибе проволоки - это просто проекция натяжения в соответствующем направлении. Например, сила на конце пружинного объекта представляет собой силу вдоль нормали контакта величиной:

F = T * cos(angle between wire and contact normal)

В этом случае нормальное направление контакта будет делить пополам угол между сегментами провода. Сила в вашей второй отмеченной точке на окружающей среде не имеет значения, так как она не влияет на напряжение или что-либо еще.

Теперь в динамическом случае натяжение - это просто сила ограничения, которую вы прикладываете к коробке, чтобы удерживать ее прикрепленной к проволоке. Так что, если физический двигатель основан на импульсах, напряжение просто:

T = impulse / timestep

Это приводит к общему алгоритму наматывания провода вокруг окружающей среды. Важным свойством является общая длина провода. Необходимо смоделировать только последний сегмент, все более ранние сегменты можно считать фиксированными. Таким образом, длина последнего сегмента известна, просто вычтите длины предыдущих сегментов из общей длины. Тогда последний сегмент может быть простым пружинным ограничением. Затем просто разделите сегмент, когда он пересекается с окружающей средой, и удалите разделение, когда изгиб выпрямляется.


Так что - просто чтобы уточнить: у меня была бы свободная масса на соединении фиксированной длины, которое присоединяется к миру при следующем «изгибе» в проводе. Я выясняю, какой импульс, что соединение применяется к коробке каждого кадра, и оттуда я могу получить напряжение в проводе?
Эндрю Рассел

Также - я обеспокоен F = T * cos(angle between wire and spring axis). Какой именно угол? Также: я не думаю, что (в симуляции) есть разумный способ, чтобы провод «знал», что к этому объекту прикреплена пружина.
Эндрю Рассел

@Andrew - Для начала, да, сила, приложенная к коробке соединением, по определению равна напряжению в проволоке. Что касается вашей второй точки, вы правы, это было не очень ясно, на самом деле это угол между проволокой и точкой контакта, нормальный. Я отредактировал ответ, чтобы сделать это более понятным.
Найл

4

Я определенно ценю ваше разочарование в этих проводных темах, это трудная проблема для решения. У нас никогда не получалось, чтобы столкновение работало идеально, но симуляция ограничений определенно выполнима и проста.

Проводное ограничение фактически практически идентично обычному ограничению расстояния. Вместо двух точек ограничения у вас есть n + 1 для провода с n сегментами, по одному для каждой вершины - в конечных точках якобиан идентичен ограничению расстояния (т.е. это что-то вроде d / | d |, где d - вектор между точками), а для внутренних узлов якобиан имеет вид (a / | a | - b / | b |), где a и b - векторы от узла к соседним узлам. (Извините, это было пару лет с тех пор, как я коснулся этого ...)

Вы не можете подделать это а-ля "только последний сегмент является динамическим", потому что, как в вашем примере, объекты могут взаимодействовать с другими сегментами, но вам нужно только моделировать массы на концах веревки - внутренне веревка может быть безмассовым Импульсы ограничения, рассчитанные в каждом узле, должны быть применены к объекту, который сталкивается в этом узле.

Вот несколько связанных документов:

Первые три относительно недавние и должны сильно помочь. На странице 75 нижнего документа описывается «многолинейное» ограничение, которое по сути является проводным.

Удачи :)

raigan


0

Основная идея заключается в том, что длина веревки остается неизменной. Если его подтолкнуть вверх, вам нужно будет создать «точку разделения» там. Затем веревка определяет, с какой стороны она прикреплена, потому что она не может «расти» в этом направлении. Поскольку он прикреплен к чему-то справа, кусок веревки слева станет короче, а участок между точкой разделения и прикрепленной точкой станет немного длиннее. Затем, как сказал Найл, рассчитайте натяжение проволоки. Как бы я это сделал - это рассчитать натяжение каждого «кусочка» веревки. Затем вы можете использовать это, чтобы определить задействованные силы.

Надеюсь это поможет.


Не совсем, извини.
Эндрю Рассел
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.