Ajuste o ângulo de rotação (θ) via slider ou atalhos rápidos para observar a transformação trigonométrica das coordenadas em torno do centro da imagem.
● Quadrado verde com marcador laranja (canto superior direito) – rotação em torno do centro.
Nesta atividade, você deve implementar a rotação de uma imagem em torno do seu centro geométrico. Esta operação requer o mapeamento de coordenadas e o uso de técnicas de interpolação para determinar os novos valores dos pixels.
nearest ou bilinear).📌 Importante:
Mapeamento Inverso: Para evitar “buracos” na imagem final, percorra cada pixel \((x', y')\) da imagem de destino e calcule sua posição correspondente \((x, y)\) na imagem original usando a matriz de rotação inversa.
Interpolação:
nearest: Atribui o valor do pixel mais próximo da coordenada calculada.
bilinear: Calcula uma média ponderada baseada nos 4 vizinhos mais próximos.
Bordas: Pixels cuja origem \((x, y)\) caia fora dos limites da imagem original devem ser preenchidos com 0.
A rotação de um ponto \((x, y)\) em relação à origem por um ângulo \(\theta\) é dada pela matriz de transformação. Para rotacionar em torno de um centro \((x_c, y_c)\), primeiro transladamos o centro para a origem, rotacionamos e transladamos de volta:
\[\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & x_c \\ \sin\theta & \cos\theta & y_c \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x-x_c \\ y-y_c \\ 1 \end{bmatrix}\]
Dica: Use o mapeamento inverso para garantir que todos os pixels da imagem de saída sejam preenchidos corretamente.
Entrada:
A primeira linha contém L.
A segunda linha contém C.
A terceira linha contém o ângulo theta (em graus) e o método interp (nearest ou bilinear).
As linhas seguintes contêm os elementos da matriz \(L \times C\).
Saída:
A matriz rotacionada com L linhas e C colunas.
| Entrada | Saída | Observação |
|---|---|---|
| 2 2 90 nearest 1 2 3 4 |
3 1 4 2 |
Rotação de 90° horário: a coluna 0 vira a linha 0 (de baixo para cima). \((0,0)=1→(1,0)\), \((1,0)=3→(0,0)\), \((0,1)=2→(1,1)\), \((1,1)=4→(0,1)\). |
| 3 3 45 bilinear 0 0 0 0 255 0 0 0 0 |
0 180 0 180 255 180 0 180 0 |
Rotação de 45°: o pixel central permanece \(255\); os vizinhos diretos recebem valor interpolado \(\approx 180\) por bilinear; os cantos permanecem \(0\). |
Ajuste o ângulo de rotação (θ) via slider ou atalhos rápidos para observar a transformação trigonométrica das coordenadas em torno do centro da imagem.
● Quadrado verde com marcador laranja (canto superior direito) – rotação em torno do centro.
%%writefile EP02_06.cpp
// sua soluçãoOverwriting EP02_06.cpp
TestSuite("EP02_06.cpp").run()✔️ EP02_06.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP02_06.cases
🔍 Testando C++: EP02_06.cpp
⚠️ EP02_06.cpp: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.