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?
źródło
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.
źródło
- 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).
źródło
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.
źródło