Penso che potresti provare a inserire una chiave quadrata in un foro rotondo applicando SAT come sei, qui. Ovviamente, non è progettato per collisioni concave e concave, e sebbene io raccomandi il tuo sforzo di adattarlo a tale scopo, ci sono considerazioni che rendono improbabile che funzioni.
Realismo
L'impulso angolare e i suoi effetti a catena sono il nome del gioco qui.
L'ordine dei punti di contatto è importante per una risoluzione realistica delle collisioni. Nel mondo reale, uno di quei punti colpirà sempre prima di un altro. Ed è solo nell'emulazione di quell'ordine di contatto e dei risultati di ciascuna "sottocollisione" rappresentata da quello, che puoi aspettarti di ottenere un risultato realistico nella simulazione. Questo è uno dei motivi per cui stai rompendo il tuo concavo in convesso, in primo luogo: consente il rilevamento a tratti di quale parte ha colpito per prima. Naturalmente, questo può anche essere emulato come da mio commento sotto la voce "Meno realismo".
I tuoi dispositivi convessi si combinano per dare all'oggetto sia il suo contorno che il suo centroide (e ovviamente in simulazioni più complesse, ogni dispositivo può influenzare diversamente la densità). Il motivo per cui menziono questo è che nel risolvere realisticamente le collisioni, dovrai calcolare non solo l'impulso lineare ma anche angolare, seguendo ogni "sottocollisione" dei tuoi punti di contatto. Non è così semplice come il "push apart" di base che si applica con SAT.
Questo quindi cambia completamente la natura del tuo problema, perché come puoi vedere, è inutile ottenere e provare a usare 2 o più punti di contatto, perché in realtà è solo il primo che conta. Dopo aver risolto il primo in termini di impulso lineare e angolare, sarà necessario ricalcolare per ulteriori collisioni, poiché gli orientamenti di ciascun oggetto saranno cambiati. Inoltre, il rilevamento di ogni singolo contatto nella fase può essere necessario o meno all'interno di quella stessa fase - a seconda della temporizzazione tra i contatti quando viene toccato il primo punto di contatto degli oggetti, viene applicato il successivo impulso lineare e angolare, seconda tocca il punto di contatto e così via.
Meno realismo
Ovviamente, supponendo che tu non sia affatto interessato a risolvere l'impulso angolare, allora il meglio che puoi fare con SAT diventa essenzialmente esattamente quello che faresti se avessi avvolto questi poligoni come convessi usando qualcosa come Graham's Scan: allontanarsi dal singolo separatore vettore. In altre parole, ha poco senso cercare di risolvere tre vettori in tandem, come hai dimostrato. È il più grande del gruppo che conta.
MODIFICA in risposta alla tua domanda
Quello che devi fare se vuoi un approccio semplicistico è il seguente:
Determina la direzione corretta di spostamento. Ciò è più semplice eseguendo uno scafo convesso ciascuno e determinando le normali sull'asse di separazione.
Ora è necessario determinare l' entità dello spostamento . Perché non possiamo semplicemente usare la grandezza data da SAT? Perché se ci pensate, le profondità di compenetrazione saranno potenzialmente maggiori per gli scafi convessi, di quanto lo saranno per i loro scafi concavi abbinati - pensate a due E con i denti l'una nell'altra! Come hai fatto sopra, trova tutti i punti di contatto per un dato passaggio, ma trovali paralleli alle normali degli assi, perché questa è la direzione di spostamento corretta. Ora determina quale di questi vettori di sovrapposizione paralleli è il più lungo. Sostituisci quello, scarta il resto e procedi al prossimo passo di fisica.