Autor Wątek: [Fizyka] Ciała złożone i wielokąty wklęsłe  (Przeczytany 1484 razy)

Offline revo

  • Użytkownik

# Listopad 02, 2006, 11:05:15
Kolejny temat z cyklu revo pisze fizyke :P

Sprawa wygląda tak, chciałbym, żeby można było dość łatwo definiować w moim systemie fizycznym obiekty, które składają się z kilku innych obiektów. Dla przykładu rozważmy + który jest zaczepiony w miejscu i się obraca po uderzeniu. Jak łatwo zauważyć, składa się z dwóch prostokątów, jednego pionowego, drugiego poziomego. Co jednak zrobić z ich obrotami, pozycjami itd, żeby dalej zostały jedną figurą? Nie wiedząć jak to rozwiązać, użyłem czegoś na tyle prostego i spełniającego moje oczekiwania, że wszystko działa nieźle - dla każdego elementu z grupy jako jego prędkość kątową i liniową, pozycje i orientacje, ustawiam na średnią tych rzeczy dla elementów całej grupy.

Jeśli chodzi o efekty, to działa, ale z oczywistych względów prędkości są mniejsze niż gdyby te obiekty poruszały się osobno. Jakie jest poprawne rozwiązanie tego problemu? Co zrobić z momentem bezwładności, masami itd, żeby osiągnąć bardziej 'poprawny' od strony fizycznej rezultat?

Druga sprawa to wielokąty wklęsłe - jedyne z czym się spotkałem, to triangulacja, a następnie liczenie kolizji z trójkątami. Powstaje tu jednak ten sam problem co powyżej - jak udeżenie w jeden trójkąt powinno odkształcić właściwości całej figury, żeby zachowywała się poprawnie.
« Ostatnia zmiana: Listopad 02, 2006, 11:06:51 wysłana przez revo »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 02, 2006, 13:46:59
Cytuj
Jakie jest poprawne rozwiązanie tego problemu?
Proponuję oddzielić integrator od części odpowiedzialnej za kolizje. Integrator operuje na dowolnych obiektach, nie zagłębiając się zbytnio w to, jaki one mają kształt. Dla niego obiekt to pozycja, prędkość i prędkość kątowa plus właściwości obiektu (masa, moment bezwładności). Na podstawie pozycji i kątu obrotu moduł odpowiedzielny za kolizje wyznacza impulsy i punkty kontaktów (w zależności, jak to rozwiązałeś). Z punktu widzenia modułu kolizji obiekt jest listą prymitywów z podanymi przekształceniami względem środka całego obiektu (w 2D wystarczy przesunięcie i kąt obrotu). Podczas wyznaczania kolizji, prymitywy są ustawiane odpowiednio względem środka złożonego obiektu, wyznaczane są impulsy/kontakty, które następnie przenoszone są spowrotem do układu całego obiektu i przekazywane do integratora.

Cytuj
Co zrobić z momentem bezwładności, masami itd, żeby osiągnąć bardziej 'poprawny' od strony fizycznej rezultat?
Wyznaczyć te wartości dla całego obiektu według wzorków znanych z fizyki. :) Masy się po prostu sumują, środek ciężkości ma pozycję wynikającą ze średniej ważonej pozycji środków ciężkości (wagami są masy obiektów składowych), a na moment bezwładności też coś tam było. Oczywiście dla niektówych obiektów możesz chcieć wyznaczyć te wartości samemu (np. rozważany + miałby podwójną gęstość w miejscu przecięcia, jeżeli byłby sumą dwóch prostokątów), ale myślę, że takich rzeczy to nikt akurat nie zauważy. :)

Offline Spider100

  • Moderator
    • Strona domowa

# Listopad 02, 2006, 18:36:22
Ja stworzyłem sobie geombody mix który składa się z innych obiektów geometrycznych i wewnątrz niego można składać kule prostokąty a trójkąty i inne obiekty później wystarczy połączyć w jeden obiekt tzn. obliczyć wspólny moment bezwładności i środek masy każdy przechowuje swoją pozycje i rotacje względną oddziaływanie na te podgeometrie powoduje oddziaływanie na cały obiekt.
Sobie popatrz przy okazji :D http://www.dathox.unit1.pl/files/phylum2d.rar

Cytuj
Druga sprawa to wielokąty wklęsłe - jedyne z czym się spotkałem, to triangulacja, a następnie liczenie kolizji z trójkątami. Powstaje tu jednak ten sam problem co powyżej [...]
Czyli masz do rozwiązania jeden problem :).
Ogólnie ja zrobiłem tak ze po triangulacji składam trójkąciki w jak największye poligony wypukłe co przyspiesza później test a dopiero wtedy łącze w obiekt :D.

Powodzenia :P

[Edit]
Odchodząc od standardowego rozwiązania możesz użyć czegoś w stylu stawów to się chyba nazywa fixed joint. Takie połączenie daje sztywne mocowanie pomiędzy obiektami i jest przydatne gdy chcemy rozrywać łączenia. Ma to jednak swoją cenę spora liczba obliczeń dla kilku obiektów połączonych w jeden.
Jak to napisać ? W sumie to nie wiem bo nie robiłem ale można użyć w 2d dwóch ball jointów.które zapewnią sztywność albo trzeba by wyprowadzić wzorek :D
« Ostatnia zmiana: Listopad 02, 2006, 19:01:26 wysłana przez Spider100 »