Buscar

ACFrOgDVAN8YDcIrXXfz8gxYFoB61QEe9xvvgN8eM9QMMn2LZBR9JIJD-WAINwl_ufaVVTFvu_AjIfeZBiQfn0ST3mslkM64kSLo1CPTiHOSU5vihcsTSgqfzlG28gav2x9-97Ce7QtMURuL5LxC

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Computação II Laboratório 7
Entregue todos os métodos em um arquivo chamado lab7.py. Critérios de avaliação: Principalmente (75%)
o código funciona, os métodos fazem o que foi pedido, parâmetros de entrada e valores de retorno são corretos
e em forma correta. Adicionalmente (25%) o código é legível, eficaz, o mais simples possível.
Daqui para adiante np significa numpy – a biblioteca a ser usada nesta lista, portanto: import numpy as np.
1. (2 pontos) Cria a função chamada calcularAngulo cujo valor de entrada são dois números reais x e
y. Se x2 + y2 = 1, considere que x representa o seno de um ângulo e y o cosseno do ângulo, calcule
e retorne esse ângulo em graus. Retorne None no caso oposto. Pode usar math.acos mas cuidado que
cos(α) = cos(−α).
2. (5 pontos) Isometria é uma transformação geométrica que mantém as distâncias entre os pontos e as
amplitudes de ângulos. No plano, qualquer isometria pode ser composta de uma reflexão em torno do
eixo x, uma rotação sobre a origem de coordenadas e uma translação por um vector. Uma isometria é
formalmente definida como transformação T de um ponto ou de um vector X tal que:
T (X) = AX + b,
onde A é uma matriz ortogonal (i.e., A>A = I) e b é um vector de translação. Como A é ortogonal, o
determinante dela é ±1. Se o determinante for 1, não há reflexão na transformação e a matriz A representa
uma rotação sobre a origem por um ângulo α, ou seja:
A =
(
cos(α) − sin(α)
sin(α) cos(α)
)
.
Se o determinante for -1, a matriz A é uma multiplicação de matrizes:
A =
(
cos(α) − sin(α)
sin(α) cos(α)
)
·Rx, onde Rx =
(
1 0
0 −1
)
é a reflexão em torno do eixo x.
Portanto uma isometria é unicamente determinada por uma matriz aumentada Ab
Ab =
(
A[0, 0] A[0, 1] b[0]
A[1, 0] A[1, 1] b[1]
)
.
Implemente a função analisarIsometria que recebe uma matriz aumentada Ab (np.ndarray). A função
deve analisar a transformação representada pela Ab e retornar uma string com a conclusão da análise
como nos exemplos abaixo:
>>> psi = np.pi/3
>>> A = np.array([[math.cos(psi), - math.sin(psi)],[math.sin(psi), math.cos(psi)]])
>>> b = np.zeros(2)
>>> Ab = np.column_stack((A,b))
>>> analisarIsometria(Ab)
’A transformacao é uma isometria composta de rotação pelo ângulo 60.00 grauss, ’
>>> reflexao = np.array([[1,0],[0,-1]])
>>> AR = A@reflexao
>>> Ab = np.column_stack((AR,b))
>>> analisarIsometria(Ab)
’A transformacao é uma isometria composta de reflexão pelo eixo x, rotação pelo ângulo 60.00 grauss, ’
>>> b = np.array([2,-1])
>>> Ab = np.column_stack((np.zeros((2,2)),b))
>>> analisarIsometria(Ab)
1
’A transformacao não é uma isometria.’
>>> Ab = np.column_stack((np.identity((2)),b))
>>> analisarIsometria(Ab)
’A transformacao é uma isometria composta de translação pelo vetor [ 2. -1.], ’
Dicas:
• Se A não for ortogonal, a transformação não é uma isometria – nesse caso retorne uma string dizendo
que a transformação não é uma isometria. O método np.allclose(G,H) retorna True se G for igual
a H e retorna False no caso oposto. O método np.transpose retorna a matriz transposta.
• Pode usar o método np.linalg.det para calcular o determinante de matriz A e descobrir se há uma
reflexão na transformação.
• Sabemos que RxRx = I, i.e., a reflexão em torno do eixo x aplicada duas vezes resulta em identidade.
Portanto, se tiver a reflexão Rx na transformação, a matriz de rotação será igual a ARxRx.
• Encontre o ângulo α da rotação a partir dos elementos da matriz de rotação usando o método
calcularAngulo.
3. (3 pontos) Implemente o método chamado comporIsometria com três parâmetros de entrada: um número
representando um ângulo (em radianos), um np.ndarray representando um vetor de translação em R2
cujo valor default é um vetor de zeros, e um valor booleano cujo valor default é False que indica se há
reflexão em torno de eixo x ou não na isometria a ser composta. A função deve então compor e retornar a
matriz aumentada Ab (em formato de np.ndarray) que representa a isometria definida a partir dos valores
de entrada – vê também a questão 2 para a teoria de matrizes representando as isometrias. Seguem os
exemplos de chamada:
>>> theta = np.pi/6
>>> comporIsometria(theta)
array([[ 0.8660254, -0.5 , 0. ],
[ 0.5 , 0.8660254, 0. ]])
>>> comporIsometria(theta, np.array([1,10]))
array([[ 0.8660254, -0.5 , 1. ],
[ 0.5 , 0.8660254, 10. ]])
>>> comporIsometria(theta, np.zeros(2), True)
array([[ 0.8660254, 0.5 , 0. ],
[ 0.5 , -0.8660254, 0. ]])
2

Continue navegando