BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior • Prova. 2 Na aula de hoje • Geometria. 3 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 – Como determinar a interseção entre linhas. 4 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. 5 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. 6 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). • b é o único ponto (0, b) em que a linha intercepta o eixo y – b=y1-mx1 7 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. 8 Geometria 9 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. 10 Geometria 11 Geometria • Por exemplo, considere os pontos (2, 1) e (2, 8); • Temos a=1, b=0 e c=-2. 12 Geometria • Agora, considere os pontos (1, 1) e (2, 8); • Temos a=-7, b=1 e c=6. 13 Geometria • Agora, considere o ponto (2, 2) e a inclinação 5; • Temos a=-5, b=1 e c=8. 14 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. 15 Geometria • Nota: a função fabs(double x) inclusa na biblioteca math.h calcula o valor absoluto de x; • A constante EPSILON é aproximadamente 0 (0,0000001). 16 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: , 17 Geometria 18 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 19 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’ – Para todos os valores de b’. 20 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. 21 Geometria 22 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 Direção ou origem e outro ponto no raio. 23 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 outros ângulos não retos. 24 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 para ângulos muito pequenos ou muito grandes. 25 Geometria A, B, C: ângulos a, b, c: lados opostos • Lei dos Senos • Lei dos Cossenos 26 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 encontrar o comprimento dos lados restantes. 27 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 • E a Lei dos Senos novamente para determinar o lado restante. 28 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). 29 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 triângulo T=(a, b, c) é: 30 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 • Na próxima aula veremos aplicações disto. 31 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. 32 Geometria • Um círculo pode ser representado em duas maneiras básicas: – Por triplas de pontos fronteiriços; – Ou por seu centro e raio • O mais conveniente para a maioria das aplicações. 33 Geometria • A equação de um círculo com raio r é • Área • Circunferência • Diâmetro • 34 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 – Ou seja, é uma linha tangente. 35 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. 36 Geometria – O triângulo formado pelos lados r, d e x é retângulo 37 Geometria • A distância d de O até o centro é calculado pela fórmula da distância. 38 Geometria • O que nos permite calcular a tangente x usando o teorema de Pitágoras – Sabemos o comprimento dos lados r e d. 39 Geometria • A partir de x, podemos calcular o ponto de tangência ou o ângulo a. 40 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 • r1, r2 e a distância dos centros. 41 Geometria 42 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; – cos-1: [0,π] radianos. 43 Geometria • Nota: existem duas funções arctan para identificar corretamente em qual quadrante está o ângulo – O que depende dos sinais de x e y. 44 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! Não! É o Super-Homem! 45 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. 46 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. 47 Exemplo de Projeto s● t● 48 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. 49 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. 50 Exemplo de Projeto 51 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. 52 Exemplo de Projeto 53 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… – Existe uma maneira mais simples. 54 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. 55 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. 56 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 resto… – Ou utilizamos funções trigonométricas inversas cos-1). 57 Exemplo de Projeto 58 Exemplo de Projeto • Mostrar o código… 59 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. 60 Perguntas? 61 Na próxima aula • + Geometria. 62 FIM 63