Kilka różnych rzeczy. Po pierwsze, musimy uznać, że jest to problem o ograniczonym ograniczeniu. Oznacza to, że istnieje wiele różnych kombinacji silników odrzutowych, które mogą strzelać, powodując obrót w tym samym kierunku. Zakładam, że w twojej sytuacji istnieją tylko dwa stany dla pędników, „włączony” i „wyłączony”, i wszystkie pędniki wytwarzają równą siłę.
Po drugie, patrząc na model, wygląda na to, że „środek masy” nie jest tak naprawdę środkiem masy. Na szczęście nie wpłynie to na twoje obliczenia momentu obrotowego. Wpłynie to jednak na twoje obliczenia dla środka przemieszczenia masy. Nie jestem jednak pewien, czy zależy ci na dokładności na tym poziomie, ponieważ „środek masy” jest co najmniej najbliższy kwadratowi do prawdziwego środka masy.
Po trzecie, jeśli chcesz obliczyć, w jaki sposób określony pędnik wpłynie na obrót, masz rację, chociaż używasz nieefektywnej formuły. Moment obrotowy można obliczyć jako r x F
, który ma wielkość r*F*sin(theta)
. Jednak obliczanie kątów w tym przypadku jest nieefektywną metodą. Zamiast tego należy bezpośrednio zastosować definicję momentu obrotowego dla różnych produktów, ponieważ będzie to o wiele prostsze przy użyciu posiadanych reprezentacji. Ponieważ wszystkie wektory nie mają składnika Z, formuła dla iloczynu krzyżowego znacznie się upraszcza.
Bez zmiany wyników obliczeń, możemy po prostu zaktualizować kod
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
To o wiele ładniejsze (i szybsze).
Sugerujesz we własnej odpowiedzi, że Twoim rozwiązaniem jest odpalenie wszystkich silników odrzutowych momentem obrotowym we właściwym kierunku. To właściwie rozwiązuje pytanie, które zadałeś. Spodziewam się jednak, że w pewnym momencie na linii okaże się, że twoja strategia nie jest tak zadowalająca, jeśli użytkownik przytrzyma przycisk „obróć”, a wszystkie pędniki z dodatnim momentem obrotowym obrócą się, potencjalnie przenosząc je na górę obracania ich (nie jestem pewien poziomu szczegółowości twojej symulacji, jeśli faktycznie obliczasz siły z silników odrzutowych, lub jeśli tylko wizualnie pokazujesz, jak odpalają, a następnie obracasz model ze stałym przyspieszeniem lub coś w tym rodzaju. sposób, chcesz, aby pędniki strzelały co najmniej w przybliżeniu dokładnie).
Nie bierze się pod uwagę siły netto na statku. Jeśli masz dowolną liczbę sterów, może to zmienić się w dość skomplikowany problem. Ponieważ jednak nasze silniki odrzutowe mają tylko dwa stany, analizowanie jest dość proste. Nie jestem do końca pewien, jaki jest nasz cel, więc mogłem sobie wyobrazić dwa różne: po pierwsze, chcemy zminimalizować całkowitą siłę, jednocześnie utrzymując moment obrotowy we właściwym kierunku. Po drugie, chcemy zmaksymalizować stosunek momentu obrotowego do siły całkowitej.
Nawiasem mówiąc, jeśli można sobie wyobrazić dodatkową kontrolę „głośności steru strumieniowego”, która wpływa na moc wszystkich silników strumieniowych jednocześnie, można ustawić tę kontrolę, aby oba rozwiązania miały równy moment obrotowy, i widać, że drugie rozwiązanie może mieć tylko mniejsze przesunięcie niż pierwsze. Musimy jednak pamiętać, że jeśli możliwe jest odpalenie silników odrzutowych, abyś tylko obracał się i nie poruszał się wcale, oba rozwiązania będą takie same.
Przejdźmy zatem do drugiego rozwiązania opartego na argumentach z poprzedniego akapitu. Teraz, analizując całkowitą siłę, możemy po prostu zauważyć, że tylko cztery kierunki mogą wskazywać silniki. Zatem całkowita siła w kierunku x to tylko liczba silników odrzutowych skierowanych w lewo minus liczba skierowana w prawo, i podobnie dla kierunku y.
Po napisaniu do tej pory muszę jeszcze trochę przemyśleć algorytm, aby go zoptymalizować. Myślę, że reszta mojego posta jest pomocna w obecnej formie, więc publikuję ją, ale zaktualizuję ją, gdy wymyślę najlepszy sposób optymalizacji tej konfiguracji (zastanawiałem się nad kilkoma sposobami uzyskania przybliżonych odpowiedzi, ale żaden z nich nie jest dokładny).