Questo è in realtà un problema risolto, ma voglio capire perché il mio metodo originale non ha funzionato (sperando che qualcuno con più conoscenze possa spiegare).
(Tieni presente che non ho molta esperienza nella programmazione 3d, avendo giocato solo con le basi per un po '... e non ho molta esperienza matematica in quest'area).
Volevo animare un punto ruotando attorno a un altro punto su un asse casuale, ad esempio un angolo di 45 gradi lungo l'asse y (pensa a un elettrone attorno a un nucleo). So come ruotare usando la matrice di trasformazione lungo l'asse X, Y e Z, ma non un asse arbitrario (45 gradi).
Alla fine, dopo alcune ricerche, ho trovato un suggerimento: ruotare il punto di -45 gradi attorno alla Z in modo che sia allineato. Quindi ruotare di qualche incremento lungo l'asse Y, quindi ruotarlo di nuovo di +45 gradi per ogni segno di spunta. Anche se questo ha funzionato sicuramente, ho ritenuto che ci fosse più lavoro necessario (troppe chiamate di metodo, matematica, ecc.) E probabilmente sarebbe piuttosto lento in runtime con molti punti da trattare.
Ho pensato che forse era possibile combinare tutte le matrici di rotazione coinvolte in 1 matrice di rotazione e usarle come un'unica operazione.
Qualcosa come:
[ cos(-45) -sin(-45) 0]
[ sin(-45) cos(-45) 0] rotate by -45 along Z
[ 0 0 1]
moltiplicare per
[ cos(2) 0 -sin(2)]
[ 0 1 0 ] rotate by 2 degrees (my increment) along Y
[ sin(2) 0 cos(2)]
quindi moltiplica il risultato per (in questo ordine)
[ cos(45) -sin(45) 0]
[ sin(45) cos(45) 0] rotate by 45 along Z
[ 0 0 1]
Ricevo 1 pasticcio di una matrice di numeri (dato che lavoravo con incognite e 2 angoli), ma sentivo che avrebbe dovuto funzionare. Non ha funzionato e ho trovato una soluzione su wiki usando un altro matirx, ma è un'altra cosa.
Non sono sicuro che forse ho fatto un errore nel moltiplicare, ma la mia domanda è: questo è in realtà un modo praticabile per risolvere il problema, prendere tutte le trasformazioni separate, combinarle moltiplicando, quindi usarle o meno ?