Pular para o conteúdo

Álgebra Linear 2D & Coordenadas Homogêneas (Matrix2D.cs)

A base matemática de toda a Computação Gráfica é a Álgebra Linear Matricial.

O arquivo Matrix2D.cs encapsula as matrizes de transformação afim no plano bidimensional, e o WPF implementa essas operações nativamente através de TransformGroup, RotateTransform e TranslateTransform.


No plano bidimensional, rotação e escala podem ser calculadas por matrizes 2×22 \times 2:

[x′y′]=[cos⁡θ−sin⁡θsin⁡θcos⁡θ][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

Entretanto, mover um ponto de lugar (Translação) exige uma soma (x+tx,  y+ty)(x + t_x, \; y + t_y), e somas não podem ser multiplicadas diretamente com matrizes 2×22 \times 2.

A Solução: Coordenadas Homogêneas (x,y,1x, y, 1)

Seção intitulada “A Solução: Coordenadas Homogêneas (x,y,1x, y, 1x,y,1)”

Ao adicionar uma dimensão auxiliar w=1w = 1, conseguimos unificar todas as operações (translação, rotação, escala) em matrizes 3×33 \times 3:

[x′y′1]=[m00m01m02m10m11m12001][xy1]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} m_{00} & m_{01} & m_{02} \\ m_{10} & m_{11} & m_{12} \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
  • Translação: Move o objeto no plano por (tx,ty)(t_x, t_y).
  • Rotação: Gira o objeto por um ângulo θ\theta.
  • Escala: Aumenta ou diminui o tamanho do objeto por (sx,sy)(s_x, s_y).
  • Cisalhamento (Shear): Inclina e deforma a geometria lateralmente.

Para girar um desenho ao redor do seu próprio centro (Px,Py)(P_x, P_y):

graph LR
A["1. Translacao para a Origem: T(-Px, -Py)"] --> B["2. Rotacao Angular: R(theta)"]
B --> C["3. Translacao de Volta: T(+Px, +Py)"]
Mfinal=T(Px,Py)×R(θ)×T(−Px,−Py)M_{\text{final}} = T(P_x, P_y) \times R(\theta) \times T(-P_x, -P_y)

4. Reutilização com ControlTemplates e Animações com AutoReverse

Seção intitulada “4. Reutilização com ControlTemplates e Animações com AutoReverse”

No ecossistema WPF, matrizes de transformação são aplicadas modularmente a geometrias definidas em ControlTemplates:

<!-- Template de Ponteiro/Raio Modular -->
<ControlTemplate x:Key="PonteiroTemplate">
<Polygon Points="0,0 -4,-18 0,-50 4,-18" Fill="#38BDF8"/>
</ControlTemplate>
<!-- Instanciação com Rotação Pivotada -->
<Control Template="{StaticResource PonteiroTemplate}">
<Control.RenderTransform>
<RotateTransform Angle="45" CenterX="0" CenterY="0"/>
</Control.RenderTransform>
</Control>

Ao aplicar DoubleAnimation em conjunto com a propriedade AutoReverse="True", a linha do tempo interpola o trajeto até o valor final e, ao término, reproduz a interpolação em sentido inverso automaticamente, mantendo a coerência física em veículos e mecanismos articulados.


Referências Oficiais Microsoft Learn


Próximo Passo: Aprenda sobre os Algoritmos de Traçado de Retas (Bresenham e Wu).