BCC402 Algoritmos e Programação Avançada

Propaganda
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
Download