Esercizio rotazione attorno ad un asse
buongiorno a tutti,
Mi sono trovato dinnanzi a questo esercizio:
[tt]Si scriva la matrice di trasformazione (coordinate omogenee) che ruota un oggetto di
60 gradi intorno ad un asse parallelo all’asse x passante per il punto (0,2,2,1)[/tt]
Purtroppo non vi sono le soluzioni ed io non sono sicuro di come devo svolgerlo.
Ho fatto due diversi ragionamenti per affrontarlo:
Il primo era traslare l'oggetto sull'asse richiesta mediante il vettore: \(\displaystyle \begin{bmatrix} 0 & 2 & 2 & 0 \end{bmatrix}^T \), poi ruotare l'oggetto mediante la matrice di rotazione attorno all'asse x:
\(\displaystyle \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(60) & -sin(60) & 0 \\ 0 & sin(60) & cos(60) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \)
e successivamente ri-traslarlo mediante il vettore inverso a quello iniziale. Ma questa operazione mi sembra equivalente alla rotazione semplice sull'asse x il che ovviamente non è quello che richiede il testo.
Il secondo metodo che mi era venuto in mente era quello di traslare l'oggetto sull'asse e ruotarlo come nel ragionamento precedente, ma poi invece di traslarlo con l'inverso del vettore iniziale, farlo con la versione ruotata di 60 gradi del vettore inverso a quello iniziale ovvero applicarvi la matrice di traslazione relativa al vettore:
\(\displaystyle v = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(60) & -sin(60) & 0 \\ 0 & sin(60) & cos(60) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ -2 \\ -2 \\ 0 \end{bmatrix} \)
Ma con questo metodo ho provato ad applicare la matrice finale ad un vettore che giace sull'asse di rotazione: \(\displaystyle \begin{bmatrix} 10 & 2 & 2 & 0 \end{bmatrix}^T \) ed ottengo un vettore diverso da questo. Penso che questo indichi che sto sbagliando poiché il teorema di Eulero dice che ogni rotazione lascia invariati i punti sull'asse.
qualcuno riesce a capire dove sto sbagliando?
Mi sono trovato dinnanzi a questo esercizio:
[tt]Si scriva la matrice di trasformazione (coordinate omogenee) che ruota un oggetto di
60 gradi intorno ad un asse parallelo all’asse x passante per il punto (0,2,2,1)[/tt]
Purtroppo non vi sono le soluzioni ed io non sono sicuro di come devo svolgerlo.
Ho fatto due diversi ragionamenti per affrontarlo:
Il primo era traslare l'oggetto sull'asse richiesta mediante il vettore: \(\displaystyle \begin{bmatrix} 0 & 2 & 2 & 0 \end{bmatrix}^T \), poi ruotare l'oggetto mediante la matrice di rotazione attorno all'asse x:
\(\displaystyle \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(60) & -sin(60) & 0 \\ 0 & sin(60) & cos(60) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \)
e successivamente ri-traslarlo mediante il vettore inverso a quello iniziale. Ma questa operazione mi sembra equivalente alla rotazione semplice sull'asse x il che ovviamente non è quello che richiede il testo.
Il secondo metodo che mi era venuto in mente era quello di traslare l'oggetto sull'asse e ruotarlo come nel ragionamento precedente, ma poi invece di traslarlo con l'inverso del vettore iniziale, farlo con la versione ruotata di 60 gradi del vettore inverso a quello iniziale ovvero applicarvi la matrice di traslazione relativa al vettore:
\(\displaystyle v = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(60) & -sin(60) & 0 \\ 0 & sin(60) & cos(60) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ -2 \\ -2 \\ 0 \end{bmatrix} \)
Ma con questo metodo ho provato ad applicare la matrice finale ad un vettore che giace sull'asse di rotazione: \(\displaystyle \begin{bmatrix} 10 & 2 & 2 & 0 \end{bmatrix}^T \) ed ottengo un vettore diverso da questo. Penso che questo indichi che sto sbagliando poiché il teorema di Eulero dice che ogni rotazione lascia invariati i punti sull'asse.
qualcuno riesce a capire dove sto sbagliando?
Risposte
Le operazioni corrette sono:
1. Traslazione mediante il vettore \([0, -2, -2, 0]^T\). (Il centro della rotazione va insomma portato all'origine).
2. Rotazione intorno all'asse x.
3. Traslazione mediante il vettore \([0, 2, 2, 0]^T\). (Che riporta quindi il centro della rotazione alla posizione originaria).
Il tuo errore era quindi nella prima trasformazione. Inoltre non credo tu stia applicando le trasformazioni correttamente. Non è infatti vero che seguendo il tuo primo ragionamento si arriva ad una rotazione che è uguale a quella intorno all'asse \(x\). Se \(R_{x60}\) è la matrice della rotazione e \(C\) è il centro della rotazione, avrai che la tua trasformazione affine sarà
\[ T(P) = R_{x60}(P - C) + C = R_{x60}P - R_{x60}C + C. \]
La tua matrice omogenea (a blocchi) sarà quindi:
\[
\begin{pmatrix}
R_{x60} & (I - R_{x60})\,C \\
0 & 1
\end{pmatrix}
\]
1. Traslazione mediante il vettore \([0, -2, -2, 0]^T\). (Il centro della rotazione va insomma portato all'origine).
2. Rotazione intorno all'asse x.
3. Traslazione mediante il vettore \([0, 2, 2, 0]^T\). (Che riporta quindi il centro della rotazione alla posizione originaria).
Il tuo errore era quindi nella prima trasformazione. Inoltre non credo tu stia applicando le trasformazioni correttamente. Non è infatti vero che seguendo il tuo primo ragionamento si arriva ad una rotazione che è uguale a quella intorno all'asse \(x\). Se \(R_{x60}\) è la matrice della rotazione e \(C\) è il centro della rotazione, avrai che la tua trasformazione affine sarà
\[ T(P) = R_{x60}(P - C) + C = R_{x60}P - R_{x60}C + C. \]
La tua matrice omogenea (a blocchi) sarà quindi:
\[
\begin{pmatrix}
R_{x60} & (I - R_{x60})\,C \\
0 & 1
\end{pmatrix}
\]