Baixe o app para aproveitar ainda mais
Prévia do material em texto
Computação II Auxílio de Laboratório 7 Este documento serve para ajudar a quem não conhece a matemática por trás da lista 7, ele acompanha a lista 7, não é autoexplicativo. 1. (2 pontos) A função calcularAngulo recebe números seno e coseno, verifique se seno2+ coseno2 = 1, senão, retorna None pois isso significa que seno e coseno não representam seno e cosseno de um ângulo. Calcule arco coseno do coseno – pode usar a função math.acos, para calcular o ângulo. Só que cos(α) = cos(−α), portanto arco coseno de coseno retorna α ∈ [0, π] mesmo que o ângulo α original foi de (π, 2π). Portanto temos que usar o seno – a gente sabe que sin(α) < 0 para α ∈ (π, 2π). 2. (5 pontos) O método analisarIsometria recebe uma matriz Ab de formato (2,3) (não precisa conferir). A última coluna da Ab representa um vetor de translação b. Se a submatriz A formada pelas primeiras duas linhas e colunas da Ab for orthogonal, ela representa uma isometria. Mas se np.transpose(A)@A não for igual à matriz de identidade, retorna a mensagem "A transformacao não é uma isometria.". Use o método np.allclose para conferir se duas matrizes são iguais. Se A for orthogonal, calcule o determinante dela. Se np.linalg.det(A) for menor que 0, sabemos que há reflexão na transformação. Nesse caso sabemos que a matriz de rotação pode ser calculada como A = A@np.transpose(R), onde R representa a matriz de reflexão, i.e., R = np.array([[1,0],[0,-1]]). Calcule o ângulo de rotação a partir dos elementos da matriz de rotação A usando o método calcularAngulo. Se o ângulo for diferente de zero, inclua essa informação na string de retorno. Confere se o vetor de translação b é diferente de vetor nulo, se for diferente, inclua a informação que há uma translação na transformaçao. 3. (3 pontos) O método comporIsometria recebe três parâmetros de entrada: um ângulo (em radianos), um vetor de translação b 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. Cria um np.ndarray representando a matriz de rotação A a partir do ângulo passado como parâmetro, usando as funções math.cos math.sin, veja o exercício 2 para saber como é a matriz de rotação definida. Se haver reflexão na transformação, faça A a ser igual a multiplicação matricial de A com a matriz R = np.array([[1,0],[0,-1]]). A matriz aumentada a ser retornada é igual á Ab = np.column_stack((A,b)). 1
Compartilhar