Jak obliczyć siły wywierane przez napięte obiekty 2D owijające drut?

10

Załóżmy, że mam prymityw fizyki, którą nazywam „drutem” owiniętym wokół środowiska 2D (jak opisano w tym pytaniu ).

Oto ilustracja tego, jak może to wyglądać:

drut owinięty wokół statycznych i dynamicznych obiektów gry

Na przykładowej ilustracji: Pudełko jest ciągnięte do góry (podtrzymywane) przez drut, a pudełko ciągnie drut w dół. Obiekt na sprężynie jest popychany przez drut w dół, ale również popycha drut w górę.

Chociaż nie zastanawiałem się jeszcze, jak to zaimplementować, załóżmy, że drut będzie się swobodnie przesuwał po punktach, w których jest owinięty.

W symulacji fizyki 2D (tj. Opartej na ramce), jak obliczyć siły (lub impulsy) przyłożone do obiektów, które są przymocowane lub owinięte takim drutem?


Jak wspomniałem w pierwszym pytaniu , wyobrażam sobie, że jeśli jedynym niestatycznym obiektem „na” drucie była masa na końcu, wówczas siła byłaby identyczna z połączeniem o stałej długości między masą a punktem przed nią to na drucie.

Andrew Russell
źródło

Odpowiedzi:

9

Pudełko ciągnące za drut przykłada napięcie do drutu. Napięcie jest siłą mierzoną w niutonach. Jeśli przyjmiemy pewne uproszczenia (brak tarcia między drutem a otoczeniem), wówczas napięcie będzie takie samo we wszystkich punktach wzdłuż drutu.

Jeśli uznamy twój przykład za statyczny, to napięcie drutu jest tylko ciężarem pudełka:

T = m * g

gdzie m jest masą skrzyni, a g jest przyspieszeniem grawitacyjnym (tj. 9,8 m / s ^ 2). Zauważ, że jest to poprawne tylko w przypadku statycznym, zobacz poniżej wyjaśnienie, jak obliczyć to w przypadku dynamicznym.

Siła na każdym zgięciu drutu jest wtedy tylko rzutem naprężenia na odpowiedni kierunek. Na przykład siła na wierzchołku obiektu sprężystego jest siłą wzdłuż normalnego styku wielkości:

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

W tym przypadku normalnym kierunkiem kontaktu byłaby przecięcie kąta między segmentami drutu. Siła w twoim drugim zaznaczonym punkcie otoczenia jest nieistotna, ponieważ nie ma wpływu na napięcie ani nic innego.

Teraz w przypadku dynamicznym napięcie jest po prostu siłą ograniczającą, którą przykładasz do skrzynki, aby utrzymać ją przymocowaną do drutu. Jeśli więc silnik fizyki oparty jest na impulsie, napięcie jest po prostu:

T = impulse / timestep

Prowadzi to do ogólnego algorytmu owijania drutu również wokół środowiska. Ważną właściwością jest całkowita długość drutu. Należy symulować tylko ostatni segment, wszystkie wcześniejsze segmenty można uznać za stałe. Tak więc długość ostatniego segmentu jest znana, wystarczy odjąć długości wcześniejszych segmentów od całkowitej długości. Zatem ostatni segment może być prostym ograniczeniem sprężystym. Następnie po prostu podziel segment, ilekroć przecina on środowisko, i usuń podział, gdy wygięcie się wyprostuje.

Niall
źródło
Tak więc - żeby wyjaśnić: miałbym swobodną masę na złączu o stałej długości, która przyczepia się do świata przy następnym „zgięciu” drutu. Dowiaduję się, jaki impuls ten staw stosuje do skrzynki każdej ramy, a stamtąd mogę uzyskać napięcie w drucie?
Andrew Russell,
Poza tym - martwię się o to F = T * cos(angle between wire and spring axis). Jaki dokładnie kąt? Ponadto: nie sądzę, aby (w symulacji) istniał rozsądny sposób, aby drut „wiedział”, że do tego obiektu jest przymocowana sprężyna.
Andrew Russell,
@Andrew - W pierwszym punkcie tak, siła przyłożona do skrzynki przez złącze jest z definicji równa napięciu w drucie. Jeśli chodzi o drugi punkt, masz rację, to nie było bardzo jasne, to właściwie kąt między drutem a punktem kontaktowym normalny. Zredagowałem odpowiedź, aby to wyjaśnić.
Niall
4

Zdecydowanie doceniam twoją frustrację związaną z drutowymi wątkami, jest to trudny problem do rozwiązania. Nigdy nie kolizja działała idealnie, ale symulacja ograniczeń jest zdecydowanie wykonalna i prosta.

Wiązanie drutu jest w rzeczywistości prawie identyczne z ograniczeniem regularnej odległości. Zamiast dwóch punktów wiązania masz n + 1 dla drutu z n segmentów, po jednym dla każdego wierzchołka - w punktach końcowych jakobian jest identyczny z ograniczeniem odległości (tj. Jest to coś w rodzaju d / | d | gdzie d jest wektorem między punktami), a dla węzłów wewnętrznych jakobian jest czymś w rodzaju (a / | a | - b / | b |), gdzie aib są wektorami od węzła do sąsiednich węzłów. (Przepraszam, minęło kilka lat, odkąd dotknąłem tego ...)

Nie można go sfałszować a-la „tylko ostatni odcinek jest dynamiczny”, ponieważ, jak w twoim przykładzie, obiekty mogą oddziaływać z innymi segmentami, ale musisz tylko symulować masy na końcach liny - wewnętrznie lina może być bezmasowym. Impulsy ograniczenia obliczone w każdym węźle należy zastosować do obiektu, który koliduje w tym węźle.

Oto kilka powiązanych dokumentów:

Pierwsze trzy są stosunkowo nowe i powinny bardzo pomóc. Strona 75 dolnego dokumentu opisuje ograniczenie „multibaru”, które jest zasadniczo drutem.

Powodzenia :)

Raigan

Raigan
źródło
0

Podstawową ideą jest to, że długość liny pozostaje taka sama. Jeśli zostanie popchnięty, musisz utworzyć tam „punkt podziału”. Następnie lina określa, po której stronie jest przymocowana, ponieważ nie może „rosnąć” w tym kierunku. Ponieważ jest przymocowany do czegoś po prawej stronie, kawałek liny po lewej stronie stanie się krótszy, a kawałek między punktem podziału a punktem zaczepienia będzie nieco dłuższy. Następnie, jak powiedział Niall, obliczyć napięcie drutu. Chciałbym to zrobić, aby obliczyć napięcie każdego „kawałka” liny. Następnie możesz użyć tego do ustalenia sił.

Mam nadzieję że to pomoże.

knight666
źródło
Naprawdę przepraszam.
Andrew Russell,