Engenharia de Computação

Computação Gráfica

AULA 5 – ATIVIDADE: Quatérnios

Para as atividades abaixo, recomendamos que use alguma ferramenta como o Excel, Google Sheets, Python Notebook, ou similares.

Quatérnios possuem vários usos, porém aqui vamos nos concentrar nos recursos de realizar rotações no espaço 3D. A construção matemática do quatérnio é em geral expressa da seguinte forma:

{"backgroundColorModified":false,"aid":null,"font":{"size":27.5,"color":"#000000","family":"Arial"},"code":"\\begin{lalign*}\n&{q\\,=\\,q_{r}\\,+q_{i}i\\,+q_{j}j\\,+\\,q_{k}k}\\\\\n\\end{lalign*}","id":"2","type":"lalign*","backgroundColor":"#FFFFFF","ts":1630430518210,"cs":"YVqPhDHAEFD+kdb45R2rCA==","size":{"width":468.6666666666666,"height":43}}

Podemos calcular o comprimento de um quatérnio com a seguinte fórmula:

{"font":{"color":"#000000","size":24,"family":"Arial"},"type":"lalign*","backgroundColorModified":false,"id":"3","code":"\\begin{lalign*}\n&{\\left|q\\right|={\\sqrt[]{q\\,\\bar{q}}}=\\,{\\sqrt[]{q_{i}^{2}+q_{j}^{2}+q_{k}^{2}+q_{r}^{2}}}}\t\n\\end{lalign*}","backgroundColor":"#FFFFFF","aid":null,"ts":1630338747118,"cs":"WY0jjogGVvEJxkUqQBMgUg==","size":{"width":537.5,"height":68}}

1. Calcule o comprimento dos seguinte quatérnios:

a) 0.024 -0.153i + 0.976j -0.153k

a) -0.559 +0.169i - 0.574j -0.574k

A multiplicação de quatérnios é um recurso que permite fazer as operações de rotação. Uma das formas de fazer essa opção é por um processo distributivo:

{"backgroundColor":"#FFFFFF","id":"7","font":{"color":"#000000","family":"Arial","size":12},"backgroundColorModified":null,"aid":null,"type":"align*","code":"\\begin{align*}\n{\\text{pq}}&={\\left(p_{r}\\,+p_{i}i\\,+p_{j}j\\,+\\,p_{k}k\\right)\\left(q_{r}\\,+q_{i}i\\,+q_{j}j\\,+\\,q_{k}k\\right)\\,}\\\\\n{\\,}&={\\left(p_{r}q_{r}-p_{i}q_{i}\\,-p_{j}q_{j}\\,-p_{k}q_{k}\\right)+\\left(...\\right)i+\\left(...\\right)j+\\left(...\\right)k}\t\n\\end{align*}","ts":1630349284574,"cs":"B9G4n932O2k+UWIEZVVMtw==","size":{"width":470.3333333333333,"height":45}}

Outra forma é usando os recursos de multiplicação escalar e vetorial:

{"id":"7","aid":null,"backgroundColor":"#FFFFFF","code":"\\begin{align*}\n{\\text{pq}}&={p_{r}q_{r}-\\mathbf{p\\cdot q}\\,+p_{r}\\mathbf{q}\\,-q_{r}\\mathbf{p}+\\mathbf{p\\times q}}\t\n\\end{align*}","type":"align*","font":{"color":"#000000","family":"Arial","size":22},"backgroundColorModified":false,"ts":1630349497488,"cs":"q3YV6NuifsvAZL8Mu7VrhA==","size":{"width":574.5,"height":27}}

Não se esqueça que a ordem da multiplicação é importante, e o cuidado que você deve ter é na multiplicação dos imaginários. Assim siga sempre a seguinte regra:

{"aid":null,"id":"1","backgroundColor":"#FFFFFF","font":{"color":"#000000","family":"Arial","size":24},"type":"lalign*","code":"\\begin{lalign*}\n&{\\mathbf{i^{2}}=\\,\\mathbf{j^{2}}=\\,\\mathbf{k^{2}}=-1,\\,\\,\\mathbf{ijk}=-1}\\\\\n&{\\mathbf{ij}=\\mathbf{k},\\,\\,\\,\\,\\,\\,\\mathbf{jk}=\\mathbf{i},\\,\\,\\,\\,\\,\\,\\mathbf{ki}=\\mathbf{j}}\\\\\n&{\\mathbf{ji}=\\mathbf{-k},\\,\\mathbf{kj}=\\mathbf{-i},\\,\\mathbf{ik}=\\mathbf{-j}}\\\\\n\\end{lalign*}","backgroundColorModified":false,"ts":1630410222024,"cs":"44NJxWPUhTmr369stjlOcQ==","size":{"width":482.33333333333326,"height":138.33333333333334}}

2. Faça a multiplicação dos quatérnions anteriores, ou seja,
(0.024 -0.153i + 0.976j -0.153k)(-0.559 +0.169i - 0.574j -0.574k):

3. Calcule o comprimento do quatérnio calculado no exercício anterior. O que aconteceu de interessante com os valores?

4. Normalize o seguinte quatérnio para que ele seja unitário:

a) 2 +2i -1j -4k

Rotações podem ser calculadas no espaço 3D pelas matrizes de rotação, que usam coordenadas de Euler diretamente. Como visto em aula, essas matrizes têm suas limitações:

   

Uma outra alternativa é através de quatérnions. Para isso se pode criar o quatérnio de rotação com a seguinte fórmula:

{"type":"$$","id":"5","backgroundColorModified":null,"aid":null,"font":{"size":12,"family":"Arial","color":"#000000"},"code":"$$q\\,=\\,\\cos\\left(\\frac{\\theta}{2}\\right)+\\sin\\left(\\frac{\\theta}{2}\\right)u_{x}i+\\sin\\left(\\frac{\\theta}{2}\\right)u_{y}j+\\sin\\left(\\frac{\\theta}{2}\\right)u_{z}k$$","backgroundColor":"#FFFFFF","ts":1630328781141,"cs":"6VheOl04Zf18kosaENuGrw==","size":{"width":478.3333333333333,"height":45}}

Existem duas formas de aplicar a rotação por quatérnios, uma é multiplicando o vetor que se deseja rotacionar pelo quatérnio e depois pelo seu conjugado:

{"aid":null,"type":"lalign*","id":"2","font":{"size":25,"color":"#000000","family":"Arial"},"backgroundColorModified":false,"code":"\\begin{lalign*}\n&{\\mathcal{rot}\\left(v\\right)\\,=\\,\\,q\\cdot v\\cdot q^{-1}}\\\\\n\\end{lalign*}","backgroundColor":"#FFFFFF","ts":1630260188465,"cs":"hD5db5avc4MmnCjngnn2uw==","size":{"width":318.24999999999994,"height":44.5}}

A outra forma é colocar os valores do quatérnio em uma matriz e então multiplicar o vetor. A matriz de rotação usando quatérnios usa a seguinte construção:

{"aid":null,"backgroundColorModified":false,"type":"lalign*","font":{"size":16.5,"color":"#000000","family":"Arial"},"backgroundColor":"#FFFFFF","code":"\\begin{lalign*}\n&{R=\\begin{bmatrix}\n{1-2\\left(q_{y}^{2}+q_{z}^{2}\\right)}&{2\\left(q_{x}q_{y}-q_{z}q_{r}\\right)}&{2\\left(q_{x}q_{z}+q_{y}q_{r}\\right)}&{0}\\\\\n{2\\left(q_{x}q_{y}+q_{z}q_{r}\\right)}&{1-2\\left(q_{x}^{2}+q_{z}^{2}\\right)}&{2\\left(q_{y}q_{z}-q_{x}q_{r}\\right)}&{0}\\\\\n{2\\left(q_{x}q_{z}-q_{y}q_{r}\\right)}&{2\\left(q_{y}q_{z}+q_{x}q_{r}\\right)}&{1-2\\left(q_{x}^{2}+q_{y}^{2}\\right)}&{0}\\\\\n{0}&{0}&{0}&{1}\\\\\n\\end{bmatrix}}\\\\\n\\end{lalign*}","id":"2","ts":1630409761516,"cs":"dPUjSHgdx4FSjN6b2ivHVA==","size":{"width":649.5000000000001,"height":152}}

5. Vamos verificar se os quatérnios funcionam mesmo.

a) Assuma um ponto (0, 1, 0), faça uma rotação por Z de 45° usando a matriz de rotação por coordenadas de Euler e depois por quatérnios, verifique se os resultados coincidem.

b) Continue a rotação do ponto acima, porém agora além da rotação em Z, faça também uma rotação de 45° em X.

c) Continue mais uma vez a rotação do ponto, agora com mais uma rotação em Y de 45°.