Escrito por Leonardo Paes, Thiago Mota e Lúcio Figueiredo
Um dos tipos de problemas recorrentes na programação competitiva são os problemas de geometria computacional. Geometria computacional é uma aplicação direta da geometria analítica na informática. Nessa aula, iremos estudar pontos e vetores no plano cartesiano, que são a base na geometria computacional.
Pontos
Pontos situados no plano cartesiano são representados por pares de inteiros , normalmente chamados de coordenadas. Os pontos são adimensionais e podem representar inúmeras coisas como coordenadas em um mapa ou funções matemáticas como, por exemplo, .
A coordenada de um ponto é comumente chamada abscissa do ponto, e representa o deslocamento horizontal de tal ponto no plano. Já a coordenada é denominada ordenada do ponto, e representa o deslocamento vertical do ponto no plano.
No plano acima estão presentes os pontos : e . (Site utilizado: Desmos).
Em C++, iremos representar pontos usando o tipo pair, como representado no código abaixo:
Distância entre dois pontos
A distância entre dois pontos, mais conhecida como distância euclidiana, é definida como o tamanho da reta que liga os dois pontos. Para calcular a distância entre eles, podemos utilizar o Teorema de Pitágoras nas componentes e .
Clique aqui para conferir a prova do Teorema de Pitágoras:
Teorema de Pitágoras: Dado um triângulo retângulo com catetos de comprimento e e hipotenusa de comprimento , vale que .
Prova:
Seja um quadrado de lado tal que .A área do quadrado é e a área de um triângulo vermelho é .
Assim, a área do quadrado cinza é .
Expandindo: .
Logo: , como queríamos demonstrar.
Observe o exemplo abaixo:
Imagine que queremos calcular a distância entre os pontos (digamos, ponto ) e (ponto ). Defina o ponto (ponto na figura) como a interseção da reta horizontal que passa por com a reta vertical que passa em .
Definindo como o comprimento do segmento ligando e e como o comprimento do segmento ligando e , temos que e . Como o triângulo formado ao ligar os pontos , e é retângulo, podemos aplicar o Teorema de Pitágoras:
Logo, a distância entre os pontos e é .
De modo geral, para dois pontos e de coordenadas e , respectivamente, temos que , onde é a distância entre os dois pontos.
O código a seguir calcula a distância entre dois pontos, utilizando a fórmula acima:
Obs: Em C++ , para pontos de distância , normalmente é utilizado o ao invés do , pois pode ser um número decimal (tipo double), e isso pode causar imprecisão na realização de cálculos.
Vetores
Um vetor é utilizado para representar grandezas vetoriais. Uma grandeza vetorial, diferentemente de um número, possuí módulo, direção e sentido. Observe a seguinte imagem:
O módulo do vetor é representado por seu tamanho, ou seja, a distância entre os dois pontos que representam o vetor. Já a direção é a reta que o vetor está localizado, então o vetor tem a mesma direção do vetor ; o que muda nesse caso é o sentido deles, já que um vai de pra e o outro de para .
Normalmente representamos o vetor apenas como um ponto , pois utilizamos a origem do vetor como sendo a origem do plano cartesiano , ou seja, o módulo do vetor representado pelo ponto é a distância entre os pontos e , o que deixa as contas bem mais simples. Quando a origem de um vetor dado não se localiza no ponto , precisaremos realizar uma translação no vetor, tópico abordado nas seções abaixo.
Soma e subtração de vetores
A soma de dois vetores e é representado pelo vetor da soma de suas coordenadas, ou seja, o vetor . Como um exemplo, a soma dos vetores e é o vetor .
Um truque para somar dois vetores geometricamente é colocar um dos vetores com a origem na ponta do outro vetor e ligar a origem de um com a extremidade do outro. Observe a imagem:
Como podemos ver, o vetor é a soma dos vetores e . Aplicando o truque citado acima, obteremos a seguinte figura:
Ao colocar a origem do vetor na extremidade do vetor , podemos ligar o início do vetor com a extremidade do vetor , obtendo, assim, o vetor .
A subtração de vetores é definida de maneira semelhante à soma. O resultado da subtração de vetores e é o vetor .
Para desenhar a subtração de dois vetores no plano, trataremos a subtração dos vetores e como sendo a soma do vetor com o vetor , que possui mesmo módulo e direção que , com sentido contrário. Assim, realizaremos o mesmo truque da soma de vetores, invertendo o sentido do vetor .
Translação de vetores
Na seção de soma e subtração de vetores, assumimos que a origem de cada vetor se localizava no ponto ; no entanto, este nem sempre é o caso. Para trabalhar com vetores com origens em pontos quaisquer, iremos mover, ou seja, transladar as suas origens para o ponto , mantendo os seus módulos, direções e sentidos.
Ao realizarmos a translação da origem do vetor para , as coordenadas de sua extremidade irão ser alteradas. Portanto, o que queremos descobrir (de modo a manter as propriedades do vetor ) são as coordenadas da sua extremidade após a translação.
Defina como as coordenadas da extremidade de antes da translação e como as coordenadas da origem de . Como iremos levar o ponto para , notamos que a extremidade do vetor irá se deslocar em no sentido horizontal e em no sentido vertical, já que mantemos o módulo, a direção e o sentido de . Portanto, concluímos que as coordenadas da extremidade de após a translação serão . Desta forma, conseguimos uma maneira de trabalhar apenas com vetores de origem em .
A figura abaixo mostra o vetor após a translação.