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

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

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

провод, обернутый вокруг статических и динамических игровых объектов

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

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

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


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

10 голосов | спросил Andrew Russell 23 J000000Friday10 2010, 09:02:18

3 ответа


9

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

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

T = m * g

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

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

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

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

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

T = impulse / timestep

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

ответил Niall 23 J000000Friday10 2010, 10:15:30
4

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

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

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

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

Первые три являются относительно недавними и должны многое помочь. В нижней части документа описывается ограничение «многобарьера», которое по существу является проводом.

Удачи:)

raigan

ответил raigan 29 MarpmTue, 29 Mar 2011 18:24:48 +04002011-03-29T18:24:48+04:0006 2011, 18:24:48
0

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

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

ответил knight666 23 J000000Friday10 2010, 10:38:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132