Escrito por Luca Dantas e Pedro Racchetti
Tendo como base as definições e operações simples com pontos e vetores, nessa aula iremos conhecer novas operações entre vetores e aprender como aplicá-las no contexto da informática.
Definições
Produto Escalar – Dot Product
O Dot Product de dois vetores é uma operação, associada a multiplicação, resultando em um escalar, ou seja, um número e é denotada por um ponto (por isso seu nome) como $$\overrightarrow{V} \cdot \overrightarrow{W}$$. Geometricamente, essa operação pode ser interpretada como o tamanho da projeção do vetor $$\overrightarrow{V}$$, na reta formada pelo vetor $$\overrightarrow{W}$$, multiplicada pelo módulo de $$\overrightarrow{W}$$. Como mostra a figura 1, podemos calcular a projeção como $$|V|cos (\theta)$$, onde $$\theta$$ é o ângulo entre os dois vetores, dessa forma, o dot product é $$|V| |W| cos (\theta)$$.

Esse modo de calcular o dot product, mesmo que correto, não é ótimo para a informática, já que depende do ângulo entre os dois vetores, que nem sempre é fornecido, e não se aplica muito bem para dimensões maiores. É possível se provar então, que o dot product é equivalente ao somatório do produto entre os valores das componentes de cada dimensão dos vetores, por exemplo, para 2 vetores: $$\overrightarrow{V} \cdot \overrightarrow{W}= V_x W_x + V_y W_y$$. Essa equivalência pode ser demonstrada a partir da lei dos cossenos, porém foge do escopo dessa aula*.
Propriedades e aplicações diretas de Dot Product
- O dot product é comutativo, ou seja, a ordem em que operamos os vetores não importa.
- Sempre escolheremos o menor ângulo, que será do intervalo $$[0,\pi]$$ radianos. Nesse intervalo, a função coseno é injetora, ou seja, cada valor de $$\theta$$ assume um valor único de imagem. Portanto, podemos usar as duas fórmulas para se calcular o ângulo entre dois vetores.
- Se fizermos o dot product de um vetor com ele mesmo, ou seja $$\overrightarrow{V} \cdot \overrightarrow{V}$$, teremos $$|V|^2$$
Produto Vetorial – Cross Product
O Cross Product de dois vetores é uma operação também associada a multiplicação, porém, diferentemente do dot, ela resulta em um outro vetor e é denotada pela cruz de multiplicação como $$\overrightarrow{V} \times \overrightarrow {W}$$. O vetor resultante terá direção perpendicular aos dois vetores, e seu sentido dependerá das posições relativas entre eles. Seu módulo será igual a área do paralelogramo com arestas nos dois vetores, podendo ser calculada como $$|V| |W| sin(\theta)$$. Note que isso equivale ao dobro da área do triangulo formado pelos pontos finais desses vetores e a origem, e esse valor pode ser calculada pelo seguinte determinante:
$$\begin{vmatrix}V_x & V_y & 1\\ W_x & W_y & 1\\ 0 & 0 & 1\end{vmatrix}$$
Note que essa é uma área que pode ser negativo, indicando que os pontos não estão em ordem anti-horária, e portanto o vetor $$\overrightarrow{W}$$ está a direita de $$\overrightarrow{V}$$. Além disso, podemos observar então que: $$\overrightarrow{V} \times \overrightarrow{W} = V_x W_y – V_y W_x$$, que é mais cômodo para se trabalhar.
Propriedades e aplicações diretas do Cross Product
- O cross product não é comutativo, já que, como observamos, depende das posições relativas entre os vetores
- Uma regra prática para se determinar se o cross é positivo ou negativo chama-se “regra da mão direita”. Se você apontar o indicador para $$\overrightarrow{V}$$, e o dedo médio para $$\overrightarrow{W}$$, o seu polegar estará no sentido de $$\overrightarrow{V} \times \overrightarrow{W}$$, como mostra a figura 2.

Figura 2 - Se o cross de dois vetores for positivo, como podemos ver na figura, o segundo estará à esquerda do primeiro, e caso contrário, a direita.
Clique aqui para conferir uma demonstração da equivalência.
Visualização no círculo trigonométrico e implicações da definição geométrica
O poder dos produtos escalar e vetorial mora na dualidade entre representação algébrica e geométrica, pois nós podemos calcular um valor com operações aritméticas básicas usando a definição algébrica e extrair dele informações sobre a disposição dos vetores no plano usando consequências da definição geométrica dessas operações. Logo ao analisar as propriedades obtidas vamos sempre pensar na definição geométrica e como ela explica o resultado obtido.
Iremos representar os vetores no círculo trigonométrico pois é um ambiente mais simples de observar e analisar as implicações.
Imagine que estamos realizando a operação $$\overrightarrow{A} \oplus \overrightarrow{B}$$, onde $$\oplus $$ pode representar tanto o produto vetorial como o escalar. Iremos representar $$\overrightarrow{A}$$ como um vetor saindo do centro do círculo trigonométrico e com direção horizontal com sentido para a direita. Já $$\overrightarrow{B}$$ se representará exatamente a $$\theta $$ graus no sentido anti-horário saindo de $$\overrightarrow{A}$$, onde $$\theta $$ é o ângulo formado entre $$\overrightarrow{A}$$ e $$\overrightarrow{B}$$ no plano original.
Note que essa definição de $$\overrightarrow{A}$$ como sendo paralelo ao eixo $$x$$ mantém a generalidade pois, como ambas operações (dot e cross) dependem somente do módulo dos vetores e do ângulo entre eles, podemos rotacionar ambos vetores de modo que o ângulo entre eles se permança inalterado e o vetor $$\overrightarrow{A}$$ fique paralelo ao eixo $$x$$ e o valor da operação se manterá constante.
Iremos representar ambos vetores com módulo $$1$$ pois nesse momento somente temos interesse nas implicações do ângulo entre os vetores, e desse modo o módulo deles não afetará as observações e assim será mais fácil de visualizar, porém as observações que serão extraídas também valem para vetores com qualquer valor de módulo. A imagem a seguir mostra esse desenho no plano:

Produto Vetorial – associado ao $$cos(\theta)$$
- Comutatividade: Podemos perceber que, se representarmos nesse modelo a operação $$\overrightarrow{B} \cdot \overrightarrow{A} $$ teremos um desenho semelhante, porém com o ângulo entre os vetores no sentido horário como $$\theta’ = 2 \pi – \theta $$, portanto pela propriedade dos cossenos de que $$cos(a) = cos(2 \pi -a)$$ temos que $$|A| \cdot |B| \cdot cos(\theta ) = |A| \cdot |B| \cdot cos(2 \pi – \theta )$$, logo $$\overrightarrow{A} \cdot \overrightarrow{B} = \overrightarrow{B} \cdot \overrightarrow{A} $$. Segue uma imagem dessa situação para melhor entendimento.
- Podemos verificar facilmente com o produto escalar se dois vetores são perpendiculares, e isso vem diretamente do fato de que $$cos(\frac{\pi}{2}) = 0$$.
- Também podemos verficar se o ângulo entre dois vetores é menor ou maior que $$\frac{\pi}{2}$$, extraindo essa informação do sinal do produto escalar, visto que $$ \forall \theta $$ tal que $$ 0 \leq \theta < \frac{\pi}{2} \implies cos(\theta ) > 0$$, e $$ \forall \theta $$ tal que $$ \frac{\pi }{2} < \theta \leq \pi \implies cos(\theta ) < 0$$ (Lembre-se que sempre consideramos $$\theta $$ no intervalo $$[0, \pi ]$$, visto que $$cos( \theta ) = cos(2 \pi – \theta)$$.
Produto Vetorial – associado ao $$sen(\theta)$$
- Podemos analisar de maneira semelhante o produto vetorial e assim é facil de perceber a não comutatividade dessa operação, já que diferentemente do cosseno, $$sen( \theta ) \neq sen(2 \pi – \theta )$$, e ainda podemos extrair um pouco mais de informação e perceber que na realidade $$sen( \theta) = – sen(2 \pi – \theta )$$, logo $$\overrightarrow{A} \times \overrightarrow{B} = – \overrightarrow{B} \times \overrightarrow{A}$$.
- Também podemos utilizar essa operação para saber se dois vetores são colineares, que acontece quando o resultado do produto vetorial é 0, pois $$sen(0) = sen( \pi ) = 0$$.
- Também podemos utilizar essa visualização para ter um melhor intuição sobre a regra da mão direita apresentada anteriormente, pois só precisamos lembrar que o ângulo é definido no sentido anti-horário partindo do primeiro vetor da operação, logo se $$\overrightarrow{A} \times \overrightarrow{B} > 0$$, podemos extrair que $$ \theta \in \hspace{0.1cm} ] 0, \pi [ $$, logo $$\overrightarrow{B} $$está no sentido anti-horário em relação a $$\overrightarrow{A} $$. Similiarmente se $$\overrightarrow{A} \times \overrightarrow{B} < 0$$, podemos extrair que $$ \theta \in \hspace{0.1cm}] \pi , 2 \pi [ $$, logo $$\overrightarrow{B} $$está no sentido horário em relação a $$\overrightarrow{A} $$.
Implementação
Aqui apresentaremos um struct em C++ que trará as operações apresentadas anteriormente para facilitar a implementação. Note, porém, que todas estas operações podem ser realizadas sem uso de struct, utilizando apenas o tipo pair; optamos por utilizar o struct para simplificar implementações posteriores.
Aplicações
Existem diversas aplicações na geometria computacional dessas operações com vetores e agora abordaremos algumas delas.
Checar se 3 pontos são colineares
Lembre-se que na discussão das implicações geométricas do produto vetorial nos dissemos que poderíamos checar se dois vetores são colineares, porém nesse caso não temos 2 vetores e sim 3 pontos, logo não podemos aplicar a operação diretamente. Precisamos conseguir descrever os 3 pontos com 2 vetores para checar a colinearidade desses vetores usando o produto vetorial.
Uma possível ideia é escolher qualquer um dos pontos e tomá-lo como a origem do sistema de coordenadas, e a partir dele traçar vetores saindo para os outros 2 pontos. É possível perceber que com essa construção os vetores formados sempre nos darão a informação sobre colinearidade que nos interessa, e a demonstração consiste na análise de diferentes casos e foge ao escopo dessa aula. Segue a imagem de um caso dessa construção.

Segue a implementação desse ideia. Usaremos o struct apresentado anteriomente, utilizando as funções de cross e de subtração de vetores.
Checar em que lado de uma reta um ponto se encontra
De modo similar ao que fizemos anteriormente devemos representar esse sistema com 2 vetores, e esses vetores podem ser formados escolhendo 2 pontos da reta para representá-la e junto ao ponto dado recentrar o sistema em algum dos pontos, porém nesse caso é necessário escolhermos o primeiro ponto na reta (o mais à esquerda, e se for uma reta vertical o mais em baixo) como centro do sistema. Agora basta verificar o sinal do valor de $$ \overrightarrow{B} \times \overrightarrow{C} $$ e utilizando as propriedades observadas anteriormente quando trabalhando com vetores e assim extrair a informação correta da orientação do ponto em relação à reta. Segue uma implementação dessa ideia.
Calcular a área de um polígono convexo
Utilizando o produto vetorial podemos calcular a área do triângulo entre dois vetores, pois, como apresentado anteriormente, a área do triângulo formado entre os dois vetores é exatamente metade do valor do produto vetorial entre esses dois vetores. Logo se quisermos saber a área de um polígono convexo basta o dividirmos em triângulos e isso pode ser feito fixando um ponto qualquer e escolhendo todos os dois pontos adjacentes no polígono se os percorremos no sentido horário ou anti-horário e calculando a área de cada um desses triângulos. Segue uma imagem e implementação dessa ideia.

Vale notar que essa ideia, apesar de ter sido apresentada inicialmente para polígonos convexos, funciona para calcular a área de qualquer polígono, porém como a visualização é mais complexa resolvemos deixar a demonstração para outro momento.

