Errori di approsimazione e matrici di rotazione
volevo sapere a livello logico la tecnica usualmente adottata che permette alle matrici di rotazione (di solito inserite in matrici in coordinate omogenee di traslazione-rotaziono-antitralazione) di conservare l'ortogonalità nonostante l'accumularsi degli errori di arrotondamento dovuti ai troncamenti usati dalla macchina. Ad esempio per ruotare un cubo nello spazio di 30° attorno ad un asse specificato, con velocità angolare di 2°/ s, dovrò spendere 15 s affinchè la rotazione sia conclusa e quindi mi serviranno 15s*15fps=225 frames, o steps, durante ciascuno dei quali dovrò applicare la matrice di rotazione di 2°/225 (una cosa piccolissima) ai vertici del cubo, prescindendo dal fatto che ciascun frame può durare di più o di meno.
Mi interessava capire:
1) come è che di fatto gli errori di approssimazione si accumulano e distorcono l'orto-normalità delle colonne (o righe) della matrice che ad ogni frame uso ?
2) se ciò accade (e mi pare di aver capito che accade) la soluzione per evitare il problema qual'è?
Viene salvata ogni tot. frames la matrice, si desumono gli angoli euleriani associati alla variazione del frame in atto, questi vengono tradotti in quaternioni e la variazione per frame implementata, il nuovo orientamento viene ritradotto in angoli euleriani che si sommano a quelli salvati in precedenza e quindi viene finalmente RI-calcolata la matrice di rotazione per il frame successivo? Non capisco dove starebbe il guadagno sull'errore... tanto vale calcolare la matrice ad hoc frame per frame accettando piccoli errori di arrotondamento...cioè non mi è chiaro come ci sia il problema del "cumulo" di questi errori.
In ogni caso: che correttivi intervengono e quando ?
grazie e ciao a tutti!
Mi interessava capire:
1) come è che di fatto gli errori di approssimazione si accumulano e distorcono l'orto-normalità delle colonne (o righe) della matrice che ad ogni frame uso ?
2) se ciò accade (e mi pare di aver capito che accade) la soluzione per evitare il problema qual'è?
Viene salvata ogni tot. frames la matrice, si desumono gli angoli euleriani associati alla variazione del frame in atto, questi vengono tradotti in quaternioni e la variazione per frame implementata, il nuovo orientamento viene ritradotto in angoli euleriani che si sommano a quelli salvati in precedenza e quindi viene finalmente RI-calcolata la matrice di rotazione per il frame successivo? Non capisco dove starebbe il guadagno sull'errore... tanto vale calcolare la matrice ad hoc frame per frame accettando piccoli errori di arrotondamento...cioè non mi è chiaro come ci sia il problema del "cumulo" di questi errori.
In ogni caso: che correttivi intervengono e quando ?
grazie e ciao a tutti!
Risposte
Il problema è solo parzialmente legato alle matrici ortogonali. Qualsiasi valore ottenuto in modo iterativo presenterà un errore che cresce con il numero totale di operazioni. Qualsiasi variazione casuale nei valori di una matrice ortogonale ne romperà l'ortogonalità e la matrice sarà tanto meno ortogonale più andrai avanti nel tempo. Le soluzioni normalmente adottate sono:
1. Normalizzare la matrice ogni \(n\) frame.
2. Usare quaternioni (meno operazioni per combinare le rotazioni e più comoda ed efficiente normalizzazione).
3. Memorizzare le rotazioni in qualche altro modo e calcolarsi la matrice di rotazione ogni volta da questa rappresentazione.
La soluzione 1 non assomiglia a quella che hai scritto tu.. Devi semplicemente fare delle operazioni sulle righe..
1. Normalizzare la matrice ogni \(n\) frame.
2. Usare quaternioni (meno operazioni per combinare le rotazioni e più comoda ed efficiente normalizzazione).
3. Memorizzare le rotazioni in qualche altro modo e calcolarsi la matrice di rotazione ogni volta da questa rappresentazione.
La soluzione 1 non assomiglia a quella che hai scritto tu.. Devi semplicemente fare delle operazioni sulle righe..