Alcune cose diverse. Innanzitutto, dobbiamo riconoscere che si tratta di un problema sotto vincolato. Cioè, ci sono molte diverse combinazioni di propulsori che possono sparare per provocare la rotazione nella stessa direzione. Presumo che nella tua situazione ci siano solo due stati per i propulsori, "on" e "off", e tutti i thruster emettono la stessa forza.
In secondo luogo, osservando il tuo modello, sembra che il tuo "centro di massa" non sia in realtà il tuo centro di massa. Fortunatamente, questo non influirà sui tuoi calcoli per la coppia. Tuttavia, effettuerà i tuoi calcoli per il centro di spostamento di massa. Non sono sicuro che ti interessi della precisione a quel livello, poiché il tuo "centro di massa" è almeno il quadrato più vicino al vero centro di massa.
In terzo luogo, se si desidera calcolare in che modo un determinato propulsore influirà sulla rotazione, è corretto, sebbene si stia utilizzando una formula inefficiente. La coppia può essere calcolata come r x F
, che ha magnitudine r*F*sin(theta)
. Tuttavia, il calcolo degli angoli in questo caso è un metodo inefficiente. Invece, dovresti usare direttamente la definizione di coppia tra i prodotti, poiché sarà molto più semplice usando le rappresentazioni che hai. Poiché tutti i tuoi vettori non hanno componenti z, la formula per prodotti incrociati semplifica notevolmente.
Senza modificare i risultati del tuo calcolo, possiamo semplicemente aggiornare il tuo codice
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
È molto più bello (e più veloce).
Suggerisci nella tua risposta che la tua soluzione è quella di sparare tutti i propulsori con la coppia nella giusta direzione. Ora, questo risolve praticamente la domanda che hai posto. Tuttavia, mi aspetto che un certo punto lungo la linea, scoprirai che la tua strategia non è così soddisfacente, se un utente tiene premuto il pulsante "ruota" e tutti i propulsori con una coppia positiva ruotano, potenzialmente spostandoli in alto di ruotarli (non sono sicuro del livello di dettaglio della tua simulazione, se in realtà calcoli le forze dai propulsori o se mostri solo visivamente che sparano e quindi ruota il tuo modello con un'accelerazione costante o qualcosa del genere. modo, vuoi che i propulsori sparino almeno approssimativamente con precisione).
Non prendere in considerazione la forza netta sulla nave. Se avessi quantità di propulsori arbitrarie, questo potrebbe trasformarsi in un problema piuttosto complicato. Tuttavia, poiché i nostri propulsori hanno solo due stati, è piuttosto semplice da analizzare. Non sono sicuro di quale sia il nostro obiettivo qui, quindi potrei immaginarne due diversi: in primo luogo, vogliamo ridurre al minimo la forza totale, mantenendo comunque la coppia nella direzione che vogliamo. In secondo luogo, vogliamo massimizzare il rapporto tra coppia e forza totale.
A parte questo, se potessi immaginare un ulteriore controllo del "volume del propulsore" che influenza contemporaneamente la potenza di tutti i propulsori, allora potresti impostare questo controllo in modo che le tue due soluzioni abbiano la stessa coppia, e vedi che la seconda soluzione può avere solo un spostamento minore rispetto al primo. Tuttavia, dobbiamo ricordare che se è possibile sparare i propulsori in modo da ruotare solo e non muoverti affatto, entrambe le soluzioni saranno le stesse.
Quindi, andremo con la seconda soluzione, basata sugli argomenti del paragrafo precedente. Ora, analizzando la forza totale, possiamo semplicemente notare che ci sono solo quattro direzioni che i motori possono indicare. Quindi la forza totale nella direzione x è solo il numero di propulsori che puntano a sinistra meno il numero che punta a destra, e allo stesso modo per la direzione y.
Dopo aver scritto fino a questo punto, devo pensare ancora un po 'all'algoritmo per ottimizzarlo. Penso che il resto del mio post sia utile così com'è, quindi lo sto postando, ma lo aggiornerò quando scoprirò il modo migliore per ottimizzare questa configurazione (ho pensato ad alcuni modi per ottenere risposte approssimative, ma nessuno di questi è esatto).