NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Capitolo 136: AxisAngle4D e Quaternioni.

 

Alcune classi di PathInterpolator fanno uso di un particolare oggetto, Quat4f, per definire le rotazioni.

Prima di prendere in esame tali classi dovremo, quindi, soffermarci un pò sui Quat4f.

 

 

Un oggetto Quat4f serve a descrivere un Quaternion (quaternione) mediante 4 valori float.

I quaternioni sono estensioni dei numeri complessi introdotti da William Rowan Hamilton nel 1843, sono formati da quattro elementi, utilizzati (tra le altre cose) in Computer Grafica per definire le rotazioni nello spazio 3D.

In questa sezione non li studieremo dal punto di vista matematico ma vedremo i concetti di base e qualche piccola scorciatoia al fine di comprendere come utilizzarli per le animazioni in Java3D.

 

 

Dei quattro valori numerici che compongono i quaternioni solo uno rappresenta una dimensione reale, mentre gli altri tre si riferiscono a dimensioni immaginarie.

Il loro prodotto non è commutativo (ossia, qa · qb è diverso da qb · qa), per cui, nel definire rotazioni composte, bisognerà prestare attenzione all'ordine degli elementi.

 

Di seguito viene spiegato come crearli a partire da un altro oggetto: AxisAngle4d.

 

 

AXISANGLE4D

Un AxisAngle4d è un oggetto AxisAngle, utilizzato per descrivere le rotazioni nello spazio 3D con 4 valori double: 3 componenti di un vettore e un angolo.

In generale, con le tre componenti double identifichiamo un vettore che, da un punto di partenza, porta ad una destinazione, mediante i valori x, y e z trattati singolarmente (cioè secondo le regole della somma vettoriale).

Il vettore però, in questo caso, non verrà utilizzato per identificare un punto, ma un asse di rotazione.

L'asse di rotazione viene calcolato sulla base delle coordinate locali dell'oggetto.

 

Il valore dell'angolo rappresenta l'entità della rotazione intorno a tale asse.

 

Java 3D AxisAngle4D

 

Costruttori:

  • AxisAngle4d;

  • AxisAngle4d(Vector3d axis, double angle);

  • AxisAngle4d(double[] a);

  • AxisAngle4d(double x, double y, double z, double angle);

  • AxisAngle4d(AxisAngle4d a1);

  • AxisAngle4f a1); .

 

Gli interpolatori accettano Quaternioni, dunque bisogna passare da AxisAngle4d a Quat4f, cosa che può essere fatta mediante le seguenti istruzioni:

 

Quat4f quats = new Quat4f();

quats.set(new AxisAngle4d([x], [y], [z], [angolo])); .

 

 

 

 

Prima di vedere all'opera Interpolatori è Quaternioni può essere utile far pratica con oggetti statici, utilizzando a tal fine l'esempio 'EsempioQuaternioni'.

 

Perchè, fino ad ora, i Quaternioni ed AxisAngle4d non sono stati trattati ?

La risposta è che non ce n'era bisogno: per le operazioni viste fino a questo punto, è sufficiente lavorare sui campi rotX, rotY e rotZ, molto più semplici da utilizzare.

 

NOTA: per creare rotazioni complesse, create cioè combinando due o più rotazioni, si consiglia di definire le due rotazioni in due quaternioni (passando, eventualmente, da AxisAngle4d), per creare in un secondo momento la rotazione finale moltiplicando tra loro i quaternioni, con ilmetodo mul(quat2) oppure con mul(quat1, quat2), simili a quelli visti per i campi rot.

L'esempio 'EsempioQuaternioni', precedentemente menzionato, fa uso proprio di questa tecnica.

 

 
Vai all'inizio della pagina