Algoritmos geométricos introdução a conceitos básicos de geometria computacional que serão abordados de forma mais avançada na disciplina Computação Gráfica disciplina de computação gráfica arquitetura de interfaces gráficas preenchimento de figuras e síntese de imagens representação e construção de objetos gráficos tridimensionais transformações geométricas (em 2 e 3 dimensões) técnicas de iluminação, sombreamento e animação Algoritmos geométricos introdução à análise e ao desenvolvimento de estruturas de dados e algoritmos para resolver problemas geométricos simples técnicas e algoritmos básicos utilizados na implementação das diversas operações sobre representações vetoriais (pontos, linhas e polígonos) algumas aplicações típicas da geometria computacional seleção de um determinado objeto através de uma interface gráfica determinação do relacionamento entre dois objetos criação de mapas de distância e solução de problemas de proximidade sobreposição e aritmética de polígonos para operações de análise espacial
Algoritmos geométricos problemas de geometria computacional entrada descrição de um conjunto de objetos geométricos conjunto de pontos conjunto de segmentos de linha vértices de um polígono saída resposta a uma consulta sobre esses objetos se as linhas se cruzam se é um novo objeto geométrico se o conjunto de pontos é uma envoltória convexa Algoritmos geométricos o estudo será de alguns algoritmos em duas dimensões, isto é, no plano cada objeto de entrada é representado como um conjunto de pontos {p, p 2, p 3,...}, onde cada p i = (x i, y i ) e x i, y i R o objeto é codificado usando um ou mais pares de coordenadas, o que permite determinar sua localização e aparência visual um polígono P de n vértices é representado por uma seqüência <p, p 2, p 3,..., p n- > de seus vértices na ordem de seu aparecimento no perímetro de P 2
Algoritmos geométricos definições e estruturas de dados ponto: é um par ordenado (x, y) de coordenadas espaciais tipo PONTO registro X, Y real; reta e segmento de reta sejam p e p 2 dois pontos distintos no plano a combinação linear α.p + (- α.p 2 ), onde α é qualquer número real, é uma reta no plano quando 0<= α <=, tem-se um segmento de reta no plano, que tem p e p 2 como pontos extremos tipo SEGMENTO registro P, P2: PONTO; Algoritmos geométricos: definições linha poligonal sejam v, v 2, v 3,..., v n-, n pontos no plano sejam s = vv, s = vv,..., s = v v 0 0 2 n 2 n 2 n uma seqüência de n- segmentos conectando esses pontos estes segmentos formam uma linha poligonal L se, e somente se, ) a interseção dos segmentos consecutivos é apenas o ponto extremo compartilhado por eles, isto é, s s = v i i+ i+ 2) segmentos não consecutivos não se interceptam, isto é, s i s j = φ para todo i, j, tais que, j # i+ os segmentos que compõem a poligonal só se tocam nos vértices 3) v 0 # v n-, isto é, a poligonal não é fechada 3
Algoritmos geométricos: definições polígono é a região do plano limitada por uma linha poligonal fechada apenas invertendo a condição (3) da definição de linha poligonal, tem-se um polígono (v 0 = v n- ) divide o plano em duas regiões: o interior, que convencionalmente inclui a fronteira (a poligonal fechada) e o exterior retângulo Algoritmos geométricos: estruturas de dados tipo RETANGULO registro X, Y, X2, Y2 real; poligonal tipo POLIGONAL registro NVERT inteiro; REM: RETANGULO; // retângulo envolvente mínimo VERTICE [NVERT] de PONTO; 4
Algoritmos básicos de geometria computacional área de um triângulo (*) coordenadas baricêntricas (*) pontos e segmentos (*) interseção de dois segmentos de reta interseção de retângulos área de polígono (*) centróide de um polígono (em SIG) (*) aula prática ponto em polígono simplificação de poligonais interseção de conjunto de segmentos união, interseção e diferenças de polígonos mapas de distância relacionamento topológico envoltória convexa (*) (*) serão abordados nesse curso Algoritmos geométricos: área de um triângulo a fórmula elementar da geometria para cálculo da área de um triângulo (igual à metade do produto entre sua base e sua altura) não é muito prática será utilizado um resultado da álgebra linear o produto vetorial dos vetores A e B determina a área (S) do paralelogramo com os lados A e B é calculada como a metade da área de um paralelogramo cálculo da área por meio de um determinante 3x3 produto vetorial dos vetores A e B, equivalente ao dobro da área do triângulo ABC 5
Algoritmos geométricos: área de um triângulo a área do triângulo ABC (que corresponde à metade do paralelogramo) pode ser computada a partir da equação calcula-se o determinante dos três pares de coordenadas, substituindo a coordenada z por s = 2 x x x a b c y y y a b c = ( 2 x y yx + yx x y + xy yx) a b a esta equação fornece outra informação útil para os algoritmos de geometria computacional, a orientação dos três pontos que forma o triângulo área positiva: pontos A, B e C formam um circuito no sentido anti-horário (a seqüência de vértices está orientada em sentido anti-horário) área negativa: pontos A, B e C formam um circuito no sentido horário (a seqüência de vértices está orientada em sentido horário) zero: os três pontos são colineares b a c a c b c b c Algoritmos geométricos: área de um triângulo o cálculo efetivo da área de um triângulo, em números reais, desprezando o sinal, pode ser feito usando a função ATRI como pode ser interessante obter a área orientada, ou seja, com sinal, tem-se a função AOTRI (área orientada do triângulo) função AOTRI (A, B, C: PONTO) real; início retorne ((A.x*B.y - A.y*B.x + A.y*C.x - A.x*C.y + B.x*C.y - B.y*C.x) / 2); fim; função ATRI (A, B, C: PONTO) real; início retorne abs(aotri (A, B, C)); fim; 6
Algoritmos geométricos: coordenadas baricêntricas para se determinar se um ponto pertence ou não a um triângulo, utilizase um método baseado em coordenadas baricêntricas cada ponto p do plano pode ser escrito na forma p = λ + p + λ2p2 λ3p3 onde λ, λ 2 e λ 3 são números inteiros e λ + λ 2 + λ 3 = os coeficientes λ, λ 2 e λ 3 são denominados coordenadas baricêntricas de p em relação a p, p 2 e p 3 os valores de λ, λ 2 e λ 3 podem ser obtidos usando a regra de Cramer, e expressos em termos de áreas de triângulos cujos vértices são p, p, p 2 e p 3, tem-se: S( pp p) S( ppp) S( pp p) 2 3 3 2 λ =, λ2 = e λ3 = S( pp p) S( pp p) S( pp p) 2 3 2 3 2 3 Algoritmos geométricos: coordenadas baricêntricas a análise do sinal das coordenadas baricêntricas indica a região do plano em que se encontra p, em relação ao triângulo p p 2 p 3 as áreas devem ser orientadas, ou seja, com sinal 7
Algoritmos geométricos: coordenadas baricêntricas a função abaixo determina se um ponto está contido em um triângulo função PTRI (P, P, P2, P3: PONTO) booleano; LAMBDA, LAMBDA2, LAMBDA3, S: real; início S = AOTRI (P, P2, P3); LAMBDA = AOTRI (P, P2, P3) / S; LAMBDA2 = AOTRI (P, P, P3) / S; LAMBDA3 = AOTRI (P, P2, P) / S; retorne ((LAMBDA > 0) e (LAMBDA2 > 0) e (LAMBDA > 0)); fim; existe uma definição dos tipos de situações de posicionamento relativo entre pontos e segmentos de reta (predicados) posicionamento relativo de ponto e segmento 8
posicionamento relativo entre dois segmentos se são iguais se eles se encontram em algum extremo se são sobrepostos posicionamento relativo entre dois segmentos se estão alinhados se são paralelos se eles se tocam 9
posicionamento relativo entre dois segmentos se eles se interceptam se são disjuntos a implementação dos predicados depende de funções básicas detectar o posicionamento relativo entre ponto e segmento de reta é baseado no sinal do produto vetorial para determinar se o ponto C está à direita ou à esquerda do segmento orientado AB, basta calcular a área do triângulo ACB se a área for negativa, o ponto C está à direita (a) se a área for positiva, C está à esquerda (b) se a área for nula, A, B e C estão alinhados (c) na verdade é desnecessário calcular a área, apenas o sinal do produto vetorial interessa 0
a implementação dos predicados depende de funções básicas a formulação anterior serve para determinar a posição relativa entre dois vetores U e V se o resultado do produto vetorial U x V for positivo, o giro de U a V é antihorário se for negativo, o giro é horário se for nulo, os vetores são colineares resultado importante para a ordenação de raios no algoritmo de FECHO CONVEXO uma implementação para este teste de posicionamento está apresentada na função LADO abaixo observe que em comparação com a função ATRI, não há necessidade de efetuar a divisão por 2 função LADO (A, B, C: PONTO) inteiro; // determina posição de C: direita (retorna ); esquerda (retorna ) e alinhado (retorna 0) S inteiro; início S = A.x*B.y - A.y*B.x + A.y*C.x - A.x*C.y + B.x*C.y - B.y*C.x; se (S < 0) então retorne senão se (S > 0) então retorne senão retorne 0; fim;
Algoritmos geométricos Exercícios) Utilizando os retornos das funções necessárias, resolva... ) a) calcule as áreas dos triângulos T e T2 compostos pelos vértices: T: (-4,0), (0,5) e (7,-2) e T2: (2,3), (0,0) e (,.5); 2) a) dado o segmento AB: (-3,-3),(,8), verifique se os pontos (-,2) e (-2,0) pertencem ao segmento, se não, de que lado eles se localizam (esquerdo ou direito)? 3) a) o ponto (2,-) pertence ao triângulo (-4,0), (0,5) e (7,-2)? 2