6.2 Espaço afim

Um espaço afim contém, além do espaço vetorial de mesma dimensão, um conjunto de pontos. Usararemos letras maiúsculas \((P, Q, \dots)\) para denotar pontos. Além das operações com vetores, é definida a operação de diferença entre pontos, que resulta em um vetor:

\[\mathbf{u}=P-Q.\]

O vetor \(\mathbf{u}\) representa o deslocamento (translação) de \(Q\) para \(P\) (figura 6.5).

Vetor como deslocamento de um ponto $Q$ para um ponto $P$.

Figura 6.5: Vetor como deslocamento de um ponto \(Q\) para um ponto \(P\).

A partir da diferença entre pontos podemos definir a operação de adição de ponto e vetor, que resulta em um ponto deslocado pelo vetor:

\[P=Q+\mathbf{u}.\]

Combinação afim

Com as operações de diferença entre pontos e adição de ponto e vetor, podemos fazer combinações entre pontos para formar novos pontos. Por exemplo, considere a seguinte operação entre os pontos \(P\) e \(Q\):

\[R=Q+a(P-Q).\]

  • Se \(a=0\), então \(R=Q\);
  • Se \(a=1\), então \(R=P\).

Valores de \(a \in [0, 1]\) produzem pontos entre o segmento que conecta \(P\) e \(Q\) (figura 6.6). As setas representam os diferentes vetores \(a(P-Q)\).

Pontos produzidos com diferentes valores de $a$ em $R=Q+a(P-Q)$.

Figura 6.6: Pontos produzidos com diferentes valores de \(a\) em \(R=Q+a(P-Q)\).

Podemos usar essa expressão para definir uma nova e importante operação básica sobre pontos. Primeiro, note que

\[R=Q+a(P-Q)\]

é equivalente a

\[R=a P+(1-a)Q.\]

Uma combinação afim entre pontos \(P\) e \(Q\) é definida como

\[P=a P + b Q,\] onde

\[a + b = 1.\]

De forma mais geral, uma combinação afim entre os pontos \(P_1, P_2, \dots, P_n\) é qualquer soma na forma

\[a_1 P_1 + a_2 P_2 + \dots + a_n P_n,\]

onde

\[a_1 + a_2 + \dots + a_n = 1.\]

Se restringirmos os escalares \(a_i\) de uma combinação afim para o intervalo \([0, 1]\), temos uma combinação convexa. A união de todas as combinações convexas de um conjunto de pontos é chamada de casco convexo ou fecho convexo (figura 6.7).

Casco convexo de um conjunto de pontos.

Figura 6.7: Casco convexo de um conjunto de pontos.

Se \(P_1\), \(P_2\) e \(P_3\) forem quaisquer três pontos não colineares, então a combinação afim

\[P=a_1 P_1 + a_2 P_2 + a_3 P_3\]

pode ser usada para gerar qualquer ponto no plano que contém \(P_1\), \(P_2\) e \(P_3\).

A união de todas as combinações convexas de \(P_1\), \(P_2\) e \(P_3\) é o conjunto de pontos do triângulo \(\triangle P_1 P_2 P_3\).

Se \(a_1, a_2,a_3 \geq 0\) e \(a_1+a_2+a_3=1\), esses três escalares são chamados de coordenadas baricêntricas. Um ponto no triângulo pode ser unicamente determinado pela combinação de quaisquer duas coordenadas baricêntricas. Como ilustrado na figura 6.8, as coordenadas baricêntricas representam razões entre as áreas de subtriângulos e a área do triângulo. No pipeline de renderização, o rasterizador usa coordenadas baricêntricas para fazer a interpolação dos atributos de vértices para os fragmentos do triângulo.

Coordenadas baricêntricas de um triângulo.

Figura 6.8: Coordenadas baricêntricas de um triângulo.