Jak obliczyć obrót spowodowany tarciem odskoku?

15

Kontynuując moje poprzednie pytanie : piłka odbija się bardzo realistycznie od powierzchni, na które uderza. Teraz chciałbym, aby obracała się od tarcia .

Pokazanie tego jest dość proste: obracam piłkę o prędkość kątową co tyknięcie i stosuję ten sam obrót podczas renderowania.

Kiedy piłka uderza w ścianę, wiem, że na prędkość obrotu wpływa ...

  • piłka jest prędkość początkowa po uderzeniu powierzchni
  • że współczynniki tarcia kuli i powierzchniowych stałych (fizycznego)
  • kąt natarcia (kąt pomiędzy kuli wejściowego wektora prędkości i normalną do powierzchni).

Kąt padania aproksymowany jest przez iloczyn iloczynu wektorów prędkości uderzenia i wyjścia piłki. (1 oznacza wysoki spin, -1 oznacza brak spinu, a wszystko inne względnie pomiędzy)

Mnożąc wszystkie powyższe elementy razem i upewniając się, że zostały one następnie przekształcone do zakresu 0-1 i pomnożone przez maksymalną prędkość obrotową, piłka wydawała się reagować na prędkość obrotową zgodnie z oczekiwaniami. Z wyjątkiem jednej rzeczy: zawsze obracałby się zgodnie z ruchem wskazówek zegara (z powodu dodatnich wartości).


Czy to dobra metoda? Czy możesz wymyślić prostszy sposób?

Jeśli ta metoda wydaje się w porządku, czego mi brakuje? Skąd mam wiedzieć, kiedy piłka powinna się obracać przeciwnie do ruchu wskazówek zegara?

klucz kodowy
źródło

Odpowiedzi:

2

Twoja metoda jest dobra, ponieważ jest bardzo prosta. Jedną rzeczą, której możesz potrzebować, jest zależność od poprzedniego obrotu piłką, której nie bierzesz pod uwagę. Obracająca się kula reprezentuje energię obrotową, więc realistyczna symulacja prawdopodobnie musiałaby ją zachować wraz z innymi energiami.

Jeśli jednak kula nie obraca się po uderzeniu, nie wyobrażam sobie sytuacji, w której zaczyna się obracać w kierunku przeciwnym do kąta padania. Oznacza to, że „zgodnie z ruchem wskazówek zegara” lub „przeciwnie do ruchu wskazówek zegara” powinny odnosić się do dowolnej strony normalnej kąta padania.

Myślę, że wystarczy pomnożyć wynik przez oryginalny wektor kierunku x (+1, jeśli podróżujesz od lewej do prawej, -1, jeśli podróżujesz od prawej do lewej).

Edycja: Możesz użyć do tego produktu krzyżowego. Incident cross normalzapewnia wektor tylko w kierunku Z (jeśli jesteśmy na płaszczyźnie xy 2D). Spójrz na element Z: jeśli jest dodatni, piłka zbliża się do niego zgodnie z ruchem wskazówek zegara. Jeśli jest ujemny, kula powinna obrócić się w kierunku przeciwnym do ruchu wskazówek zegara.

eli
źródło
Hej, eli Po pierwsze, biorę pod uwagę oryginalny obrót piłki, po prostu zapomniałem wspomnieć o tym w moim poście. Po drugie, nie sądzę, aby system kierowania X działał. Próbowałem tego, ale jeśli piłka uderzy w powierzchnię od dołu idąc w lewo, wektor x będzie wynosić -1, oznaczałoby to obrót w kierunku przeciwnym do ruchu wskazówek zegara, podczas gdy w rzeczywistości powinien obracać się zgodnie z ruchem wskazówek zegara
klucz kodowy
Jak bierzesz pod uwagę pierwotny obrót piłki? Jeśli obraca się bardzo szybko, może wystartować w zupełnie innym kierunku. Problem z produktem kropkowym w twoim przypadku polega na tym, że używa on cosinusa (funkcja parzystości). Potrzebujesz czegoś innego, aby ustawić znak relacji między wektorami (incydent i normalność). W tym celu można użyć produktu krzyżowego (produktu wektorowego). Zredagowałem swoją odpowiedź, aby uwzględnić metodę obejmującą wiele produktów.
eli
ponownie czytam odpowiedź po edycji, podoba mi się. Wypróbowałem to i działało całkiem dobrze. Jeśli chodzi o pierwotny spin, mówiłem tylko o stopniowym zmienianiu rotacji ... jeśli chodzi o oryginalny spin wpływający na wektor wyjściowy, to mój następny krok :)
codemonkey
Ta edycja była jednym z 3 różnych rozwiązań, które zasugerowałem i wyjaśniłem, dlaczego musicie to zrobić (kropka podaje tylko wielkość, a nie kierunek kąta). Niestety, chyba powinien być bardziej zwięzły.
Kaj,
przepraszam za tego kaja, to mnie ześlizgnęło ... nie zamierzam się
obrazić
3

Najpierw uzyskaj styczną do powierzchni od normalnej powierzchni: t = (ny, -nx)

Następnie można uzyskać składową prędkości wzdłuż powierzchni jako vt = v kropka t .

Teraz możesz obliczyć obrót piłki: w = | ( normal * r) cross vt |, gdzie r jest promieniem piłki.

Zakładam, że kula nie ma bezwładności obrotowej i zaczyna się natychmiast obracać z prędkością, jaką miałaby, gdyby miała przetoczyć się po powierzchni. Możesz użyć współczynnika tarcia, aby uczynić go bardziej realistycznym i, jeśli chcesz, wziąć pod uwagę bezwładność obrotową piłki.

Danik
źródło
Dzięki za odpowiedź, Danik. Już teraz biorę pod uwagę bezwładność obrotową kuli (dodając ją do nowego obrotu), a także tarcie powierzchni jako współczynnik, który należy pomnożyć przez całkowitą prędkość obrotu. Im większe tarcie, tym wyższa prędkość obrotowa, prawda?
klucz kodowy
2

- Może to zabrzmi głupio, ale nie używasz iloczynu wektora kuli i normalnej powierzchni i po prostu robisz arccos, aby obliczyć kąt, prawda? Ponieważ wtedy kąt byłby dodatni, czy byłby dodatni (do 90 stopni) czy ujemny (tak samo), ponieważ cosinus jest symetryczny wokół 0.
Jeśli tak jest, zamiast używać normalnej płaszczyzny, użyj samego kierunku płaszczyzny i odejmij 90 stopni od kąta, więc od 0 do 180 zmieni się w -90 do +90 stopni (lub -pół PI do + połowy PI, jeśli jesteś pochylony promieniowo).

Kaj
źródło
Rozważmy ten przypadek: x + ve ma rację, y + ive jest w dół; Wektor powierzchni S = (1,0); mamy dwa wektory prędkości uderzenia V1 = (3,4) uderzające z góry, powinno obracać piłkę zgodnie z ruchem wskazówek zegara i V2 = (3, -4) uderzające od dołu, powinno obracać piłkę przeciwnie do ruchu wskazówek zegara. Teraz normalne dla obu wektorów byłyby odpowiednio (3 / 5,4 / 5) i (3/5, -4 / 5). Teraz iloczyn iloczynu dla obu wektorów wynosiłby 3/5. wygenerowany kąt wyniósłby arccos (3/5) = 53 stopnie dla OBU wektorów. Co prawda, ale po przeciwnych stronach! więc jeśli użyję tej metody, nadal skończę, powodując obrót zgodny z ruchem wskazówek zegara. Widzisz mój dylemat?
codemonkey
3 możliwe rozwiązania. 1) Nie używaj normalnej, ale kierunek boku i odejmij 90 stopni, jak wspomniano powyżej. 2) Symuluj to samo, zamieniając xiy wartości normalnej i odwracając jeden (pomnóż przez -1). 3) Pomnóż kąt ze znakiem iloczynu krzyżowego dwóch wektorów, ponieważ produkt krzyżowy reprezentuje grzech kąta, który nie jest symetryczny wokół 0 stopni.
Kaj,
Iloczyn skalarny nie podaje kąta, tylko wielkość kąta, potrzebny jest również kierunek kąta. Wszystkie 3 sposoby powyżej symulują użycie sinusoidy, która daje ci stronę. Możesz także użyć podstawowego wyzwalacza, aby uzyskać kąt. Sin (alfa) = długość przeciwnej strony / długość pochyłej strony (na podstawie trójkąta o jednym kącie 90 stopni między stroną przeciwną a stroną nachyloną). To i pitagoras do obliczenia długości boków zrobią.
Kaj,
Nawiasem mówiąc, przeczytaj ponownie moją pierwotną odpowiedź, ponieważ rozwiązuje to dylemat, biorąc kąt z płaszczyzną zamiast normalnej i odejmując 90 stopni.
Kaj,
0

Pierwszą rzeczą, którą musisz rozwiązać, jest to, że prędkość obrotowa lub obroty wirują przed uderzeniem w ścianę; powiedzmy Si; jest większa, równa lub niższa niż wartość potrzebna do utrzymania tego samego obrotu po uderzeniu, powiedzmy Ss. Dzięki temu możesz uzyskać rzeczywistą wartość po uderzeniu spinu, powiedzmy Se, używając wartości tarcia między piłką a powierzchnią

Uzyskaj składnik prędkości na odbijającej powierzchni Vxi = Vi kropka Vx, będąc Vx wektorem równoległym do powierzchni o wielkości 1.

Szukana wartość to Ss = Vxi / r, służy to przekształceniu Vxi w prędkość kątową. Jeśli Si jest niższe niż Ss, piłka powinna uzyskać pozytywny obrót. Jeśli Si jest równe Ss, piłka powinna utrzymać mniej więcej ten sam obrót, o tym później. Jeśli Si jest większe niż Ss, piłka powinna stracić obrót

straty i przyrost prędkości zależą od wartości tarcia Fr. W rzeczywistości jest to krzyż między promieniem a siłą tarcia, ale tę wartość można ustawić według własnego uznania.

Musisz także zauważyć, że oprócz cewki odbijającej, piłka traci trochę energii z powodu tarcia między piłką a powierzchnią, w związku z czym negatywnie wpływa to na Vxi. Powiedziałbym, że cewka odbijająca wpływa na Vy, a tarcie wpływa na Vx.

Powinieneś wziąć pod uwagę deformację piłki. Wpłynie to na czas lub kadry, które kula przywiera do ściany, przez co siła frakcyjna będzie wywierać przez dłuższy czas wpływając na prędkość wirowania i prędkość wyjściową. To odkształcenie zależy od tego, jak ma wyglądać Twój model.

Aprah
źródło