Universidade Federal de Pernambuco Centro de Informática Recife, 20 de novembro de 2002 Disciplina: Computação Gráfica Professor: Alejandro Frery Aluno: Francisco do Nascimento Júnior

Resolução da 1^{a} Lista de Exercícios

1 Questão 01

Descreva a transformação Ψ, em operadores e coordenadas homogêneas, que faz uma rotação de θ graus em torno do ponto (a,b). Resolução: Translada-se o ponto (a,b) para a origem, utilizando o operador T_{−a,−b}. Em seguida, podemos aplicar o operador de rotação R_{θ}, que opera em relação a origem. Agora, desfaz-se a translação para achar o valor da rotação. Para isso, aplica-se o operador T_{a,b}. Em em termos de operadores, tem-se a transformação

Ψ = T_{a,b} · R_{θ} · T_{−a,−b}

Considere a matriz de transformação M̄ a implementação do operador Ψ. Logo, tem-se:

M = [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ −a & −b & 1 \end{matrix} ] • [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ a & b & 1 \end{matrix} ]

M = [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ −a cos θ + b sin θ & −a sin θ − b cos θ & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ a & b & 1 \end{matrix} ]

M = [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ −a cos θ + b sin θ + a & −a sin θ − b cos θ + b & 1 \end{matrix} ]

2 Questão 02

Exemplos de pares de elementos em τ que comutam e que não são do mesmo tipo, isto é, mostre, usando elementos de τ, pelo menos uma situação para a seguinte situação S_{a_{1},b_{1}}R_{θ}^{•} = R_{θ}^{•}S_{a_{1},b_{1}}. Resolução: Podemos obter esses exemplos através da relação T_{a,b}S_{c,d} = S_{c,d}T_{a,b}. Vemos abaixo essa relação utilizando coordenadas homogêneas:

[ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ a & b & 1 \end{matrix} ] • [ \begin{matrix}c & 0 & 0 \\ 0 & d & 0 \\ 0 & 0 & 1 \end{matrix} ] = [ \begin{matrix}c & 0 & 0 \\ 0 & d & 0 \\ ac & bd & 1 \end{matrix} ]  (1)

Comutando as matrizes, obtemos:

[ \begin{matrix}c & 0 & 0 \\ 0 & d & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ a & b & 1 \end{matrix} ] = [ \begin{matrix}c & 0 & 0 \\ 0 & d & 0 \\ a & b & 1 \end{matrix} ]  (2)

Então, para ser verdade a comutatividade, os parâmetros a, b, c, d têm que satisfazer tais propriedades: 1 - Se a = 0, então c pode adquirir qualquer valor. 2 - Se a ≠ 0, então c deve ser igual a 1. E a mesma relação ocorre entre b e d. Veja, agora, uns exemplos disso: T_{0,2} e S_{3,1} Prova: Seja M_{1} a matriz que implementa o operador ψ_{1} = T_{0,2}S_{3,1} e M_{2} a matriz que implementa o operador ψ_{2} = S_{3,1}T_{0,2}

M_{1} = [ \begin{matrix}3 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 2 & 1 \end{matrix} ] = [ \begin{matrix}3 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 2 & 1 \end{matrix} ]  (3)

M_{2} = [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 2 & 1 \end{matrix} ] • [ \begin{matrix}3 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} ] = [ \begin{matrix}3 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 2 & 1 \end{matrix} ]  (4)

Verificou-se que as matrizes M_{1} e M_{2} são iguais, logo os dois operadores são comutáveis.

Agora, a segunda questão: em que situações os operadores S_{a,b} e R_{θ} são comutáveis? Utilizaremos o mesmo procedimento de igualar as matrizes que implementam as duas possibilidades de concatenação dos dois operadores. Seja M_{3} a matriz que implementa o operador ψ_{3} = S_{a,b}R_{θ} e M_{4} a matriz que implementa o operador ψ_{4} = R_{θ}S_{a,b}

M_{3} = [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{matrix} ] = [ \begin{matrix}a cos θ & b sin θ & 0 \\ −a sin θ & b cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] (5)

M_{4} = [ \begin{matrix}a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] = [ \begin{matrix}a cos θ & a sin θ & 0 \\ −b sin θ & b cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] (6)

Logo, para tais operadores serem comutáveis, devemos ter: a sin θ = b sin θ ⇒ a = b Dai, podemos exemplificar a situação com:

- S_{2,2} e R_{45^{o}}

3 Questão 03

Considere a transformação geométrica ψ utilizando operadores e coordenadas homogêneas, que leva um triângulo com vértices (1,1), (1,2), (3,3) no triângulo equilátero com vértices )1,0), (-1,0) e (0, \sqrt{3}). Resolução: Sabendo que podemos implementar qualquer transformação utilizando uma matriz da forma:

[ \begin{matrix}a & b & 0 \\ c & d & 0 \\ e & f & 1 \end{matrix} ]  (7)

Então, temos a seguinte relação, utilizando coordenadas homogêneas:

[ \begin{matrix}1 & 1 & 1 \\ 1 & 2 & 1 \\ 3 & 3 & 1 \end{matrix} ] • [ \begin{matrix}a & b & 0 \\ c & d & 0 \\ e & f & 1 \end{matrix} ] = [ \begin{matrix}1 & 0 & 1 \\ −1 & 0 & 1 \\ 0 & \sqrt{3} & 1 \end{matrix} ]  (8)

Esta relação resulta nos dois sistemas de equações abaixo:

\begin{matrix}a + c + e = 1 \\ a + 2c + e = −1 \\ 3a + 3c + e = 0 \end{matrix}  (9)

Solução: a = \frac{3}{2}, c = -2, e = \frac{3}{2}

\begin{matrix}b + d + f = 0 \\ b + 2d + f = 0 \\ 3b + 3d + f = \sqrt{3} \end{matrix} c  (10)

Solução: b = \frac{\sqrt{3}}{2}, d = 0, f = -\frac{\sqrt{3}}{2}

Daí, conclui-se a matriz de transformação:

[ \begin{matrix}\frac{3}{2} & \frac{\sqrt{3}}{2} & 0 \\ −2 & 0 & 0 \\ \frac{3}{2} & \frac{\sqrt{3}}{2} & 1 \end{matrix} ]  (11)

4 Questão 04

Determine a matriz de uma rotação em torno de um eixo arbitrário do espaço. Suponha que o eixo é definido por um vetor unitário v = (v_{x}, v_{y}, v_{z}) e passa pela origem. Resolução: O objetivo é mover o eixo arbitrário para um dos eixos do sistema de coordenadas. Considerações:

- θ_{x} = ângulo entre o vetor e o eixo x

- θ_{y} = ângulo entre o vetor e o eixo y

- θ_{z} = ângulo entre o vetor e o eixo z

Segue-se os procedimentos para efetuar a rotação em torno do eixo definido pelo vetor unitário v = (v_{x}, v_{y}, v_{z}):

• Traça-se a projeção da extremidade do vertor nos três eixos e utilizando o módulo do vetor igual a 1 (um), verifica-se que : cos θ_{x} = v_{x} cos θ_{y} = v_{y} cos θ_{z} = v_{z}

• Fazer rotação de α_{x} em torno do eixo x, tal que o vetor fique contido ao plano xz. (R_{α_{x}}^{x})

• Rotacionar de α_{y} em torno do eixo y, de modo que o vetor coincida com o eixo z. (R_{α_{y}}^{y})

• Posicionado o vetor no eixo z, pode-se aplicar a rotação de α_{z} em torno de z, que será, conseqüentemente em torno do vetor desejado. (R_{α_{z}}^{z})

Aplicada a rotação desejada, agora deve-se desfazer as transformações feitas no sistema, a fim de voltar ao estado original.

• Desfazer a rotação de α_{y} em torno do eixo y. (R_{−α_{y}}^{y})

• Desfazer, por fim, a rotação de α_{x} em torno do eixo x. (R_{−α_{x}}^{x})

Por fim, encontramos o operador

ψ = R_{−α_{x}}^{x} · R_{−α_{y}}^{y} · R_{θ} · R_{α_{y}}^{y} · R_{α_{x}}^{x}  (12)

que efetua a rotação em torno do vetor v.

Calculemos agora os ângulos de rotação α_{x} e α_{y}. Projeta-se o vetor v no plano yz, encontrando um vetor p de coordenadas (0, v_{y}, v_{z}) e módulo igual a \sqrt{v_{y}^{2} + v_{z}^{2}}

Sendo α_{x} o ângulo α_{x} entre o vetor p projetado e o eixo z, tem-se cos α_{x} = \frac{v_{z}}{\overline{p}} e sin α_{x} = \frac{v_{y}}{\overline{p}} Seja M_{x} a matriz de transformaçãao que implementa a rotação em torno do eixo x de α_{x}:

M_{x} = [ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & cos α_{x} & − sin α_{x} & 0 \\ 0 & sin α_{x} & cos α_{x} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]  (13)

Substituindo os valores de cos α_{x} e sin α_{x} obtidos acima, tem-se:

M_{x} = [ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & \frac{v_{z}}{\overline{p}} & −\frac{v_{y}}{\overline{p}} & 0 \\ 0 & \frac{v_{y}}{\overline{p}} & \frac{v_{z}}{\overline{p}} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]  (14)

Aplicando a transformação acima ao vetor v, utilizando coordenadas homogêneas, encontra-se o vetor v’, ou seja, (v_{x}, v_{y}, v_{z}, 1) · M_{x} = (v_{x}, 0, p, 1) = (v′, 1). Vamos, agora, calcular o α_{y}! α_{y} é o ângulo entre o eixo z e o vetor v’. Logo, temos cos α_{y} = p e sin α_{y} = v_{x}. Seja M_{y} a matriz de transformaçãao que implementa a rotação em torno do eixo y de α_{y} (note que esse ângulo está no sentido horário):

M_{y} = [ \begin{matrix}cos α_{y} & 0 & − sin α_{y} & 0 \\ 0 & 1 & 0 & 0 \\ sin α_{y} & 0 & cos α_{x} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]  (15)

Substituindo os valores de cos α_{y} e sin α_{y} obtidos acima, tem-se:

M_{y} = [ \begin{matrix}p & 0 & −v_{y} & 0 \\ 0 & 1 & 0 & 0 \\ v_{y} & 0 & p & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]  (16)

No mais, podemos implementar o operador ψ a partir das operações que o compõem e representar por uma matriz de transformação M.

M = [ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & \frac{v_{z}}{\overline{p}} & −\frac{v_{y}}{\overline{p}} & 0 \\ 0 & \frac{v_{y}}{\overline{p}} & \frac{v_{z}}{\overline{p}} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}p & 0 & −v_{y} & 0 \\ 0 & 1 & 0 & 0 \\ v_{y} & 0 & p & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}cos θ & − sin θ & 0 & 0 \\ sin θ & cos θ & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] •

[ \begin{matrix}p & 0 & v_{y} & 0 \\ 0 & 1 & 0 & 0 \\ −v_{y} & 0 & p & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & \frac{v_{z}}{\overline{p}} & \frac{v_{y}}{\overline{p}} & 0 \\ 0 & −\frac{v_{y}}{\overline{p}} & \frac{v_{z}}{\overline{p}} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]

Multiplicando a primeira matriz pela segunda e a terceira pela quarta, temos;

M = [ \begin{matrix}p & 0 & −v_{y} & 0 \\ −\frac{v_{y}^{e}}{p} & \frac{v_{z}}{p} & −v_{z} & 0 \\ \frac{v_{y}v_{z}}{p} & \frac{v_{y}}{p} & v_{z} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]•[ \begin{matrix}p cos θ & − sin θ & v_{y} cos θ & 0 \\ p sin θ & cos θ & v_{y} sin θ & 0 \\ −v_{y} & 0 & p & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]•[ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & \frac{v_{z}}{\overline{p}} & \frac{v_{y}}{\overline{p}} & 0 \\ 0 & −\frac{v_{y}}{\overline{p}} & \frac{v_{z}}{\overline{p}} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]

(17)

Agora, multiplicamos a primeira pela segunda, e resultou-se em:

M = [ \begin{matrix}p^{2} cos θ + v_{y}^{2} & −p sin θ & pv_{y} · (cos θ − 1) & 0 \\ v_{y}^{2} · (1 − cos θ) + v_{z} sin θ & \frac{v_{y}^{2} sin θ+v_{z} cos θ}{p} & v_{y}p · (\frac{v_{z} sin θ−v_{y}^{2} cos θ}{p^{2}} − 1) & 0 \\ v_{y}v_{z} · (cos θ − 1) + v_{y} sin θ & \frac{v_{y}}{p} · (cos θ − v_{z} sin θ) & \frac{v_{y}^{2}}{p} · (v_{z} cos θ + sin θ) + v_{z}p & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] •
[ \begin{matrix}1 & 0 & 0 & 0 \\ 0 & \frac{v_{z}}{\overline{p}} & \frac{v_{y}}{\overline{p}} & 0 \\ 0 & −\frac{v_{y}}{\overline{p}} & \frac{v_{z}}{\overline{p}} & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ]

Por fim, achamos a matriz de transformação M:

M = [ \begin{matrix}p^{2} cos θ + v_{y}^{2} & v_{y}^{2} · (1 − cos θ) − v_{z} sin θ & A & 0 \\ v_{y}^{2} · (1 − cos θ) + v_{z} sin θ & \frac{v_{z}^{2} cos θ+v_{y}^{4} cos θ}{p^{2}} + v_{y}^{2} & B & 0 \\ v_{y}v_{z} · (cos θ − 1) + v_{y} sin θ & C & D & 0 \\ 0 & 0 & 0 & 1 \end{matrix} ] (18)

onde A = −v_{z} sin θ + v_{z}v_{y} · (cos θ − 1) B = \frac{v_{y}^{3} sin θ+v_{y}v_{z} cos θ+v_{y}v_{z}^{2} sin θ−v_{z}v_{y}^{3} cos θ}{p^{2}} − v_{z}v_{y}

C = \frac{v_{y}v_{z}}{p^{2}} · (cos θ − v_{z} sin θ) − \frac{v_{y}^{3}}{p} · (v_{z} cos θ + sin θ) − v_{z}v_{y}p

D = \frac{v_{y}^{2}}{p^{2}} · (cos θ + v_{z}^{2} cos θ) + v_{z}^{2}

5 Questão 05

Considere os pontos P_{0} ≠ P_{1} no plano. Escreva a matriz de transformação em coordenadas homogêneas que implementa a projeção ortogonal de qualquer ponto sobre a reta definida por P_{0} e P_{1}. Resolução: Considerações: P_{0} = (x_{0}, y_{0}) P_{1} = (x_{1}, y_{1}) d (distância entre os pontos) = \sqrt{(y_{1} − y_{0})^{2} + (x_{1} − x_{0})^{2}} θ = ângulo entre a reta e o eixo x, portanto: cos θ = \frac{x_{1}−x_{0}}{d} sin θ = \frac{y_{1}−y_{0}}{d}

Procedimentos:

• Levar o ponto P_{0} para a origem do sistema, aplicando o operador T_{−P_{0}}.

• Rotacionar de θ ao redor da origem, de modo que a reta coincida com um dos eixos (escolhemos o eixo x). Como o ângulo está no sentido horário, teremos R_{−θ}.

• Com isso, fica fácil pegar a projeção de um ponto, pois será a abscissa desse ponto após as transformações acima citadas. Para isso, utilizamos o operador de mudança de escala com 1 e 0 como parâmetros. (S_{1,0}).

• Agora, temos que desfazer a operações realizadas anteriormente: R_{θ} e em seguida, T_{P_{0}}.

Em suma, representamos a projeção desejada como:

ψ = T_{P_{0}} · R_{θ} · S_{1,0} · R_{−θ} · T_{−P_{0}}  (19)

Agora, iremos implementar o operador ψ utilizando coordenadas homogêneas. Considere a matriz de transformação M, a implementação do operador ψ.

M = [ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ −x_{0} & −y_{0} & 1 \end{matrix} ] • [ \begin{matrix}cos θ & − sin θ & 0 \\ sin θ & cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 1 \end{matrix} ] • [ \begin{matrix}cos θ & sin θ & 0 \\ − sin θ & cos θ & 0 \\ 0 & 0 & 1 \end{matrix} ] •

[ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ x_{0} & y_{0} & 1 \end{matrix} ]

Muliplicando, agora, a primeira matriz com a segunda e a terceira com a quarta, temos:

M = [ \begin{matrix}cos θ & − sin θ & 0 \\ sin θ & cos θ & 0 \\ −x_{0} cos θ − y_{0} sin θ & x_{0} sin θ − y_{0} cos θ & 1 \end{matrix} ]•[ \begin{matrix}cos θ & sin θ & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 1 \end{matrix} ]•[ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ x_{0} & y_{0} & 1 \end{matrix} ]

(20)

Agora, vamos multiplicar a primeira pela segunda:

[ \begin{matrix}(cos θ)^{2} & cos θ sin θ & 0 \\ sin θ cos θ & (sin θ)^{2} & 0 \\ −x_{0}(cos θ)^{2} − y_{0} sin θ cos θ & x_{0}(sin θ)^{2} − y_{0} cos θ sin θ & 1 \end{matrix} ]•[ \begin{matrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ x_{0} & y_{0} & 1 \end{matrix} ]

(21)

Finalmente, temos:

M = [ \begin{matrix}(cos θ)^{2} & cos θ sin θ & 0 \\ sin θ cos θ & (sin θ)^{2} & 0 \\ −x_{0}(cos θ)^{2} − y_{0} sin θ cos θ + x_{0} & x_{0}(sin θ)^{2} − y_{0} cos θ sin θ + y_{0} & 1 \end{matrix} ]

(22)

Onde: cos θ = \frac{x_{1}−x_{0}}{d} sin θ = \frac{y_{1}−y_{0}}{d} d = \sqrt{(y_{1} − y_{0})^{2} + (x_{1} − x_{0})^{2}}