Як обчислити сили, накладені натягнутим дротом, що обгортає 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 є векторами від вузла до сусідніх вузлів. (Вибачте, пройшло пару років, як я торкнувся цього ...)

Ви не можете підробити це a-la "лише останній сегмент є динамічним", оскільки, як у вашому прикладі, об'єкти можуть взаємодіяти з іншими сегментами, але вам потрібно лише імітувати маси на кінцях мотузки - всередині мотузка може бути безмасштабним. Імпульси обмеження, обчислені на кожному вузлі, потрібно застосувати до об'єкта, що стикається на цьому вузлі.

Ось кілька супутніх робіт:

Перші три порівняно недавні і повинні дуже допомогти. Сторінка 75 нижньої статті описує "багатобарвне" обмеження, яке по суті є дротом.

Удачі :)

Райган


0

Основна ідея полягає в тому, що довжина мотузки залишається однаковою. Якщо його підштовхують вгору, вам потрібно буде створити там «роздільну точку». Тоді мотузка визначає, з якої сторони вона прикріплена, тому що вона не може "рости" в тому напрямку. Оскільки він прикріплений до чогось праворуч, шматок мотузки зліва стане коротшим, а шматок між точкою розколу та прикріпленою точкою стане трохи довшою. Потім, як сказав Найлл, обчисліть натяг дроту. Як я це зробив - це обчислити натяг кожного "шматка" мотузки. Потім ви можете використовувати це для визначення залучених сил.

Сподіваюсь, це допомагає.


Не дуже, вибачте.
Ендрю Рассел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.