BCC402
Algoritmos e Programação
Avançada
Prof. Marco Antonio M. Carvalho
Prof. Túlio Ângelo M. Toffolo
Na aula anterior
Na aula de hoje
Geometria
• A geometria é inerentemente uma disciplina visual
– Desenhar figuras e analisá-las cuidadosamente.
• Certas operações “óbvias” realizadas à mão requerem programação não trivial para serem realizadas computacionalmente
Geometria
• Nesta aula vamos desenferrujar um pouco sobre geometria
– Linhas, pontos, triângulos, círculos, etc.
• Problemas mais elaborados envolvendo segmentos de linha e polígonos serão estudados na próxima aula.
Geometria
• Linhas são a menor distância entre dois pontos…
– Comprimento infinito em ambas as direções
• Diferentemente de segmentos de linha, que são finitos.
– Vamos nos concentrar em linhas no plano
• Por falar nelas, procure pelo problema de mesmo nome no livro Matemática Concreta.
Geometria
• Linhas podem ser representadas por pares de pontos ou equações
– Pares de pontos (x1, y1) e (x2, y2) que estejam sobre uma linha podem descrevê-la
completamente;
– Também, equações do tipo y=mx+b descrevem uma linha completamente
• m é a inclinação da linha
– m= (x1, x2)/ (y1, y2).
Geometria
• Linhas veriticais não podem ser descritas por equações como as anteriores porque o divisor seria zero;
• A equação x=c denota uma linha vertical que cruza o eixo x no ponto (c, 0);
• Este tipo de degeneração requer atenção extra quando estivermos programando;
• Utilizaremos a fórmula mais geral ax+by+c=0 para atendermos a todas as possibilidades.
Geometria
• Multiplicar qualquer um destes coeficientes por uma constante não nula resulta em uma representação alternativa para qualquer linha;
• É estabelecida uma representação canônica pela insistência que o coeficiente y é 1 caso seja
diferente de zero
– Caso contrário, o coeficiente x é 1;
– Apenas uma simplificação que mantém a linha próxima da origem.
Geometria
• Por exemplo, considere os pontos (2, 1) e (2, 8); • Temos a=1, b=0 e c=-2.Geometria
• Agora, considere os pontos (1, 1) e (2, 8); • Temos a=-7, b=1 e
Geometria
• Agora, considere o ponto (2, 2) e a inclinação 5; • Temos a=-5, b=1 e c=8.Geometria
• Duas linhas possuem um ponto de interseção, a não ser que sejam paralelas
– Linhas paralelas possuem a mesma inclinação, porém, diferentes pontos de interceptação dos eixos, e por definição nunca se cruzam.
Geometria
• Nota: a função fabs(double x) inclusa na biblioteca math.h calcula o valor absoluto de x;
Geometria
• Um ponto (x’, y’) está sobre uma linha l se a substituição de x por x’ na fórmula y=mx+b resulta em y’;
• O ponto de interseção das linhas l1 (y = m1x + b1) e l2 (y2 = m2x + b2) é o ponto em que ambas são iguais, ou seja:
Geometria
• Quaisquer duas linhas não paralelas se cruzam formando um determinado ângulo;
• Duas linhas l1: a1x+b1y+c1=0 e l2: a2x+b2y+c2=0 se cruzam no ângulo θ dado por:
• Para linhas representadas por inclinação, a fórmula se reduz a
Geometria
• Duas linhas são perpendiculares se elas se cruzam em ângulo reto;
• Uma linha perpendicular à linha l: y=mx+b é y=( -1/m)x+b’
Geometria
• Um subproblema útil é o de identificar o ponto sobre a linha l que mais se aproxime mais de um determinado ponto p;
• Este ponto mais próximo está sobre a linha que passa por p que é perpendicular a l
– Logo, pode ser determinado usando as rotinas anteriores.
Geometria
• Raios são partes de linhas que se originam a partir de um vértice v, chamado de origem;
• Qualquer raio é completamente descrito por:
– Uma equação de linha; – Origem
– Destino
Geometria
• Existem três funções trigonométricas básicas:
– Seno, Cosseno e Tangente.
• Estas funções são importantes porque nos
permitem relacionar o comprimento de quaiquer dois lados de um triângulo retângulo com os
Geometria
• Internamente, as funções trigonométricas são calculadas usando expansões da Série de
Taylor
– Tendem a ser instáveis;
– Não espere que θ = sen-1(sen(θ)), especialmente
Geometria
• Lei dos Senos
• Lei dos Cossenos
A, B, C: ângulos
Geometria
• Alguns problemas são recorrentes em triângulos;
• Dados dois ângulos e um lado, encontre o resto
– Os três ângulos devem somar 180º = π radianos; – A Lei dos Senos nos fornece um meio para
Geometria
• Dados dois lados e um ângulo, encontre o resto
– Se o ângulo está entre os dois lados fornecidos, a Lei dos Cossenos nos fornece um meio de
calcular o lado restante
• A Lei dos Senos nos permite determinar os ângulos restantes.
– Caso contrário, a Lei dos Senos e a propriedade da soma dos ângulos podem ser usadas para determinar os ângulos
Geometria
• A área A(T) de um triângulo T é dada por A(T) = ½ab, em que a é a altura e b a base do
triângulo
– A base é qualquer um dos lados;
– A altura é a altura do terceiro vértice em relação à base (calculado pelo teorema de Pitágoras).
Geometria
• Uma outra maneira de calcular a área do
triângulo é direta a partir de suas coordenadas
– Usando álgebra linear e determinantes, pode ser mostrado que a área (com sinal) A(T) do
Geometria
• Note que a área com sinal pode ser negativa
– Então devemos usar o valor absoluto. – Isto não é um bug do cálculo
Geometria
• Um círculo é definido como o conjunto de
pontos a uma determinada distância (ou raio) a partir de seu centro (xc, yc);
• Um disco é um círculo somado a seu interior
– Ou seja, o conjunto de pontos cuja distância é no máximo r a partir de seu centro.
Geometria
• Um círculo pode ser representado em duas maneiras básicas:
– Por triplas de pontos fronteiriços; – Ou por seu centro e raio
Geometria
• A equação de um círculo com raio r é • Área
• Circunferência • Diâmetro
Geometria
• Uma linha l intercepta um círculo c em zero ou dois pontos em boa parte das vezes
– Neste primeiro caso, a linha não cruza o círculo; – No segundo caso, ela cruza o interior do círculo.
• O único caso restante é quando a linha toca a borda do círculo, mas não seu interior
Geometria
• A construção de uma linha tangente é ilustrada a seguir
– O ponto de contato entre c e l está sobre a linha perpendicular (90o) a l através do centro de c.
Geometria
– O triângulo formado pelos lados r, d e x é retângulo
Geometria
• A distância d de O até o centro é calculado pela fórmula da distância.
Geometria
• O que nos permite calcular a tangente x usando o teorema de Pitágoras
Geometria
• A partir de x, podemos calcular o ponto de tangência ou o ângulo a.
Geometria
• Dois círculos c1 e c2 de raios distintos r1 e r2 podem interagir entre si de diversas maneiras:
– Eles terão uma interseção sse a distância entre seus centros for no máximo r1+r2 ;
– O menor círculo (e. g., c1) estará completamente
contido em c2 sse a distância entre os centros mais r1 for no máximo r2;
– Se c1 e c2 possuírem interseções, os dois pontos de interseção formam triângulos com os centros, cujos lados são determinados
Geometria
• A biblioteca padrão math.h contém as funções trigonométricas padrões
– O retorno das funções é em radianos.
• Outro ponto importante é o intervalo de ângulos retornado pelas funções inversas
– sen-1 e tan-1: [-π/2,+π/2] radianos.
– tan2-1: [-π,+π] radianos;
Geometria
• Nota: existem duas funções arctan para identificar corretamente em qual quadrante está o ângulo
Exemplo de Projeto
Mais rápido que uma bala;
Mais forte que uma locomotiva; Capaz de saltar sobre os prédios; É um pássaro!
É um avião!
Exemplo de Projeto
• O Super Homem deseja demonstrar seu poder entre sua posição atual s = (xs, ys) e uma
posição alvo t = (xt, yt)
– O ambiente contém obstáculos cilíndricos, como colunas
• A visão de raio-x não possui alcance infinito, sendo limitada pela quantidade de material que precisa atravessar.
– Ele está ansioso para calcular o comprimento total dos obstáculos entre os dois pontos, para saber se tenta a demonstração ou não.
Exemplo de Projeto
• Uma vez decidido, o Super Homem voará entre os dois pontos
– O caminho ideal é a linha que liga os dois pontos
• Porém, ele não voa através dos objetos.
– Quando encontra um obstáculo, ele o contorna e então volta à linha reta
• O que não é o menor caminho, a não ser que se escolha a menor curva do contorno.
Exemplo de Projeto
s●
Exemplo de Projeto
• Assuma que:
– Os obstáculos não possuem interseção; – Os pontos inicial e final estão fora dos
obstáculos;
– A especificação dos círculos é feita pelas coordenadas do centro e raio.
Exemplo de Projeto
• Precisaremos de 3 operações geométricas básicas:
1. Testar se um círculo possui interseção com uma linha l;
2. Computar o comprimento do segmento de linha da interseção;
3. Computar o comprimento do arco que contorna o menor lado do círculo cortado por l.
Exemplo de Projeto
• A primeira tarefa é fácil:
– Basta encontrar a menor distância entre o centro do círculo até l
• Se for menor que o raio do círculo, há interseção; • Caso contrário, não há interseção.
– Para testar se a interseção ocorre entre s e t,
basta verificar se tal ponto em l mais próximo do centro do círculo está contido na caixa formada por s e t.
Exemplo de Projeto
• Já a segunda tarefa…
– Podemos calcular as coordenadas dos dois pontos de interseção
• Basta igualar as equações da linha e do círculo e resolver a equação quadrática resultante.
• “Basta”? Só se for para o super homem…
Exemplo de Projeto
• Sabemos que d, a menor distância entre o centro do círculo e l está sobre uma linha perpendicular a l
– Logo, todos os 4 ângulos da interseção destas linhas são retos.
Exemplo de Projeto
• Incluindo os ângulos incidentes aos triângulos com lados r, d e x
– Podemos obter x pelo teorema de Pitágoras; – E o comprimento será 2x.
Exemplo de Projeto
• O arco (contorno) de menor comprimento pode ser obtido a partir do ângulo a
– O arco é 2a/2π vezes a circunferência do círculo; – Em radianos.
• O ângulo pode ser computado como um dos problemas recorrentes de triângulos
– Dados dois lados e um ângulo, encontre o
Exemplo de Projeto
Geometria
Sumário dos arquivos:
• geometry.h: define os tipos de dados para
pontos, polígonos, segmentos de reta, círculos e triangularizações, além de constantes;
• geometry.c: implementa funções para
representação de linhas e segmentos de linha, testes de paralelismo, interseção, distância e áreas de algumas formas;
• superman.c: exemplo de problema que usa geometria básica.