6.3 Espaço euclidiano
O espaço euclidiano é um espaço afim que inclui a operação de produto escalar, também chamada de produto interno.
O produto escalar produz um escalar a partir de dois vetores. Com isso é possível definir conceitos como distância e ângulo.
O espaço euclidiano inclui o espaço vetorial de números reais . Seus elementos são -tuplas de números reais que denotam coordenadas do sistema de coordenadas cartesiano. A figura 6.9 ilustra a representação de um ponto em coordenadas cartesianas no espaço euclidiano de três dimensões (espaço 3D).
Figura 6.9: Representação de um ponto no espaço 3D.
As operações do espaço vetorial são definidas como:
As operações afins são definidas como:
Frames
Assim como no mundo físico não existe um ponto de referência absoluto (uma “origem” no universo), no espaço euclidiano qualquer ponto pode ser considerado como a origem. Desse modo, para definir unicamente vetores e pontos, precisamos de uma base e um ponto de referência. Um frame cumpre esse papel27.
Um frame de um espaço euclidiano de dimensões é composto por:
- Um ponto de referência ;
- Uma base composta por vetores linearmente independentes .
Dado um frame , um vetor
pode ser escrito unicamente como
Um ponto
pode ser escrito unicamente como
O ponto de referência representa a origem do frame. No frame cartesiano padrão,
e a base é formada pelo conjunto de tuplas
No , a base é frequentemente denotada por vetores , , :
O conceito de frame é importante em computação gráfica pois é comum que os modelos geométricos 3D sejam representados originalmente em um frame local no qual a origem é o centro ou a base do objeto. Esses modelos podem ser dispostos em uma cena virtual 3D que usa outro frame de referência. Além disso, durante o processamento geométrico do pipeline de renderização, os objetos da cena podem ser expressos em relação ao frame da câmera virtual, cuja origem é frequentemente o centro de projeção. Veremos futuramente como realizar essas mudanças de representação através de matrizes de transformação.
Produto escalar
Sejam e dois vetores do . O produto escalar, denotado por , é a soma da multiplicação componente a componente das tuplas. O resultado é, portanto, um escalar:
As seguintes propriedades se aplicam:
- .
- .
- , e se e somente se .
- .
Ortogonalidade
Se , então e são ortogonais, isto é, os vetores são perpendiculares entre si.
Quando todos os vetores de uma base são ortogonais, temos uma base ortogonal.
A base padrão de é um exemplo de base ortogonal, pois para .
Comprimento e distância
No espaço euclidiano, a magnitude ou comprimento de um vetor é definida pela norma euclidiana:
A norma euclidiana permite calcular a distância entre pontos. Como é um vetor de deslocamento de para , a distância entre os dois pontos pode ser calculada como
A figura 6.10 ilustra a distância euclidiana entre dois pontos e . Observe sua relação com o teorema de Pitágoras.
Figura 6.10: Distância entre dois pontos no plano.
Normalização
Se , dizemos que é um vetor unitário. Podemos transformar qualquer vetor não nulo em um vetor unitário na mesma direção, denotado por , se dividirmos todos os elementos de por seu comprimento: A figura 6.11 ilustra o resultado da normalização de vetores no . Observe que os vetores normalizados desenhados a partir da origem ficam inscritos em um círculo unitário.
Figura 6.11: Um conjunto de vetores (esquerda) e seus correspondentes vetores normalizados (direita).
Sempre que possível trabalharemos com vetores unitários. O uso de vetores unitários simplifica o cálculo do sombreamento e iluminação de superfícies.
Quando dois vetores unitários são ortogonais, dizemos que os vetores são ortonormais. A base padrão do é uma base ortonormal pois possui vetores de base unitários (isto é, ) e ortogonais entre si.
Ângulo entre vetores
O produto escalar entre dois vetores e não nulos é proporcional ao cosseno do ângulo formado entre esses vetores:
Logo,
Se os vetores são ortogonais, . Se os vetores são paralelos e na mesma direção, .
O menor ângulo não negativo entre dois vetores () pode ser calculado como:
Note que, para vetores unitários, a expressão é mais simples:
e
A relação entre e é como segue:
A figura 6.12 mostra exemplos dos diferentes valores do produto escalar usando vetores no plano.
Figura 6.12: Valor do produto escalar e ângulo entre vetores.
Projeção ortogonal
Dado um vetor e um vetor não nulo, podemos decompor como uma soma de dois vetores, sendo um paralelo a e outro ortogonal a (figura 6.13):
é o vetor paralelo, chamado de projeção de sobre , sendo que
é o vetor ortogonal a (isto é, ) e
Figura 6.13: Projeção ortogonal de um vetor sobre outro.
Note que, se é um vetor unitário,
onde é o ângulo entre e .
Produto vetorial
Sejam e dois vetores do . O produto vetorial ou produto externo de e é definido como
onde é um vetor unitário ortogonal a e , e é o ângulo entre e . Assim, é um vetor ortogonal aos dois vetores, com magnitude como mostra a figura 6.14.
Figura 6.14: Produto vetorial.
A direção do vetor ortogonal é dada pela regra da mão direita: usando a mão direita, se o indicador apontar na direção de e o dedo médio apontar na direção de , o vetor ortogonal apontará na direção do dedão (figura 6.15).
Figura 6.15: Direção do produto vetorial segundo a regra da mão direita (imagem modificada do original).
O produto vetorial é anticomutativo, isto é,
Assim, se a ordem dos operandos for invertida, o vetor ortogonal apontará para a direção oposta, como mostra a figura 6.16 (pela regra da mão direita, o dedão apontará para baixo).
Figura 6.16: A ordem dos operandos determina a direção do vetor ortogonal.
O produto vetorial é calculado como
Para memorizar mais facilmente, podemos expressar o produto vetorial como um determinante de ordem 3:
Usando expansão de cofatores:
Uma vez que o vetor ortogonal tem tamanho proporcional ao seno do ângulo entre os vetores, o produto vetorial de dois vetores paralelos é o vetor nulo:
Outras propriedades são dadas a seguir:
- .
- .
- .
- .
Além disso,
Vetor normal
Um vetor normal, ou simplesmente “normal,” é um vetor perpendicular ao plano que tangencia uma superfície em um dado ponto. Em computação gráfica, vetores normais são essenciais para o cálculo correto do sombreamento e iluminação de superfícies.
Se considerarmos a superfície de uma esfera de raio dada pela equação
a normal de um ponto sobre essa esfera é o vetor (figura 6.17). O vetor no sentido oposto, , também é um vetor normal. Entretanto, em superfícies fechadas como a esfera, geralmente estamos interessados nas normais que apontam para fora da superfície.
Figura 6.17: Vetor normal em um ponto na superfície de uma esfera.
O cálculo do vetor normal em superfícies suaves frequentemente exige o uso de ferramentas de geometria diferencial. Por exemplo, em uma superfície definida implicitamente como uma função level set , o vetor normal é calculado através do gradiente
De fato, para a esfera centralizada na origem,
e
Entretanto, neste curso não trabalharemos com superfícies implícitas. Utilizaremos apenas superfícies formadas por malhas de triângulos, uma vez que o pipeline gráfico do OpenGL trabalha apenas com pontos, segmentos e triângulos. Se quisermos renderizar uma esfera, teremos de usar uma malha triangular que aproxime essa esfera. A figura 6.18 ilustra uma malha que aproxima uma esfera. Essa malha pode ser descrita unicamente por triângulos, pois cada quadrilátero pode ser formado por dois triângulos.
Figura 6.18: Vetor normal em uma malha que aproxima a superfície de uma esfera.
Em geral, dada uma malha de triângulos, não temos acesso à representação implícita ou paramétrica da superfície que a malha tenta aproximar. Assim, no caso geral, a normal mostrada na figura 6.18 precisa ser calculada utilizando unicamente os triângulos que formam a malha.
Figura 6.19: Calculando o vetor normal de um triângulo.
Para calcular a normal de um triângulo , basta definir dois vetores sobre o plano do triângulo, e então calcular o produto vetorial desses vetores. Os dois vetores podem ser obtidos através da subtração dos vértices que formam quaisquer duas arestas do triângulo (figura 6.19):
Em geral, desejaremos trabalhar com normais unitárias. Nesse caso, a normal será calculada como
Como o triângulo é uma superfície planar, o vetor normal é o mesmo para todos os pontos do triângulo. Entretanto, isso evidencia um problema com o cálculo do vetor normal em vértices de uma malha que aproxima uma superfície suave. Observe na figura 6.20 o detalhe ampliado da esfera da figura 6.18. Cada face, formada por dois triângulos (mostrados pelo tracejado), é uma superfície planar. Portanto, cada face tem o mesmo vetor normal para todos os pontos. Por outro lado, o ponto é compartilhado por quatro faces (seis triângulos). Qual das normais (, , , ) deve ser utilizada em ?
Figura 6.20: Detalhe ampliado de uma esfera aproximada por uma malha.
Como a malha de triângulos aproxima uma superfície suave, podemos calcular um vetor normal em como uma média dos vetores normais de todos os triângulos que usam . Uma forma simples de fazer isso é através da normalização da soma dessas normais
onde é o vetor normal do -ésimo triângulo que usa . O resultado é um vetor normalizado chamado de normal de vértice. A figura 6.21 ilustra, em um corte bidimensional, como a normal do vértice aproxima a superfície suave mostrada no tracejado.
Figura 6.21: Normal de vértice como aproximação da normal da superfície suave.
Podemos utilizar este método sempre que soubermos que a malha aproxime uma superfície suave. Veremos nas próximas seções que esse é o método ideal para ser utilizado com geometria indexada, que é a geometria em que os atributos de um vértice são compartilhados com todas as faces adjacentes. Entretanto, se a malha representar um objeto com quinas, tal como um cubo ou pirâmide, então cada face precisará ser renderizada com vértices não compartilhados, pois queremos evidenciar a descontinuidade da superfície. Se esse fosse o caso da geometria ilustrada na figura 6.20, quatro vértices teriam de ser utilizados em : um para cada face (quadrilátero formado por dois triângulos). Os vértices teriam a mesma posição de , mas cada um usaria a normal da face correspondente.
Nesse contexto, frame é um quadro de referência (frame of reference) de um sistema de coordenadas e não tem relação com o termo frame utilizado para descrever uma imagem renderizada.↩︎