Sumário COMPUTAÇÃO GRÁFICA E INTERFACES Curvas Planas ◊ Introdução ◊ Curvas paramétricas ◊ Curva Bèzier ◊ Curva Hermite ◊ Curva B-Spline ◊ Curva Catmull-Rom Carlos Carreto Curso de Engenharia Informática Ano lectivo 2003/2004 Escola Superior de Tecnologia e Gestão da Guarda Introdução Hoje em dia, uma das aplicações mais importantes da computação gráfica é sem duvida o computer-aided design (CAD). O CAD é usado extensivamente num grande número de áreas tais como engenharia aeroespacial, engenharia automóvel, engenharia náutica, engenharia civil e engenharia electrónica. O sucesso da aplicação da computação gráfica à engenharia deve-se sobretudo ao progresso do chamado computer aided geometric design (CAGD) que proporciona a base matemática para descrever e processar forma geométricas, nomeadamente (curvas, superfícies e sólidos). Os métodos mais promissores para descrever formas geométricas são as curvas e superfícies paramétricas. Embora estes métodos sejam em conhecidos na teoria, as suas aplicações em sistemas CAD têm sido objecto de investigação nos últimos 50 anos. Os maiores avanços conseguidos são sem duvida as representações Bèzier e B-spline de curvas e superfícies que são hoje em dia o standard da industria. Veremos a seguir a matemática por detrás destes métodos que são de grande importância para a modelação de superfícies e sólidos. Introdução Formas de representar curvas Forma não paramétricas Representação por equações onde uma das coordenadas é determinada em função da outra: y = F(x) Equações paramétricas Representação por equações onde as coordenadas são obtidas em função de um parâmetro: y = F(t) x = F(t) 1 Introdução Introdução Forma não paramétrica Forma não paramétrica Exemplos de equações não paramétricas na forma explicita Exemplos de equações não paramétricas na forma implícita y = f(x) y = mx + b z = - (Ax + By + D) / C f( x, y) = 0 Ax + By + C = 0 (x - x0)2 + (y - y0)2 - r2 = 0 Levantam problemas na hora de representar curvas com laços ou com tangentes verticais (m = ∞ na equação da recta).Por esse motivo têm um uso limitado na computação gráfica. Resolvem alguns problemas da representação explicita, mas não permitem o calculo directo das coordenadas dos pontos. São úteis em computação para determinar o exterior e o interior. f( x, y, z) > 0 => Exterior f( x, y, z) < 0 => Interior Introdução Principais desvantagens da forma não paramétricas para uso em CAGD É difícil definir a equação não paramétrica de uma curva a partir de um conjunto de pontos de controlo (é difícil de manipular interactivamente). Introdução Forma paramétrica Curvas paramétricas Superfícies Paramétricas x = f(u) y = g(u) z = h(u) x = f(u,v) y = g(u,v) z = h(u,v) Exemplos de equações paramétricas Não permite a representação de curvas com laços. Circunferência: x = x0 + r cos θ y = y0 + r sin θ θ∈[0, 2π] É difícil definir a equação não paramétrica de uma curva que passe por um conjunto de pontos pré-definidos. Segmento de recta: x = (1-t) . x0 + t . x1 y = (1-t) . y0 + t . y1 t ∈[0, 1] 2 Introdução Introdução Principais vantagens da forma paramétricas para uso em CAGD Resolve os problemas da forma não paramétrica. A curva pode ser definida a partir de um conjunto de pontos de controlo (é fácil de manipular interactivamente). A curva pode ou não passar por um conjunto de pontos pré-definidos. A curva é aproximada por polinómios que definem as suas várias partes. O comportamento da curva em relação a cada um dos eixos é definido por equações independentes. A curva é definida através de um conjunto de pontos de controlo que influenciam a forma da curva. Os nós são pontos de controlo que pertencem à curva. A curva pode ser interpolada, passando nesse caso por todos os pontos de controlo, ou pode ser aproximada, passando apenas em alguns pontos de controlo ou mesmo em nenhum. Os pontos de controlo definem a fronteira de um polígono designado por convex hull. As coordenadas são obtidas em função de um parâmetro. Introdução Introdução Por vezes é necessário representar a curva através de um conjunto de curvas menores ligadas entre si. Nesse caso queremos garantir a continuidade das curvas. Definição de Spline Uma Spline é uma curva composta por segmentos de curvas definidos por polinómios que satisfazem determinadas condições de continuidade nas extremidades de cada segmento. Uma equação é classificada de acordo com os termos que contem. Se todos os termos são elevados a uma determinada potência, a equação é um polinómio. Se a maior potência é um, a equação é linear. Se a maior potência é dois, a equação é quadrática. E a maior potência é três, a equação é cúbica. Continuidade de ordem zero, as curvas encontram-se num ponto Continuidade de primeira ordem, as tangentes são coincidentes Continuidade de segunda ordem, a “velocidade” antes e depois é igual 3 Introdução Curvas Bèzier Curvas paramétricas cúbicas Características da curva Bèzier Para garantir a continuidade de primeira ordem, as curvas são aproximadas por polinómios de grau 3: É definida por 4 pontos de controlo (P0, P1, P2, P3). x(t) = axt3 + bxt2 + cxt + dx y(t) = ayt3 + byt2 + cyt + dy t∈[0, 1] Passa pelos pontos extremos. Os vectores tangentes dos pontos extremos são determinados a partir dos segmentos de recta (P0, P1) e (P2, P3) . Forma matricial: [x y] =[t 3 t 2 a x b x t 1 c x dx ] P1 a y by c y dy P3 P0 P2 Curvas Bèzier Curvas Bèzier Curva Bèzier de 3 pontos Curva Bèzier de 4 pontos Considerem-se 3 pontos P0, P1 e P2 definindo os segmentos de recta (P0, P1) e (P1, P2). Seguindo o mesmo raciocínio e fazendo agora a ponderação de duas curvas: C1(t) = (1-t) . R1 + t . R2 C2(t) = (1-t) . R2 + t . R3 Vimos que a equação da recta consiste numa média ponderada onde (1-t) é o peso de P0 e t é o peso de P1: P(t) = (1-t) . P0 + t . P1 C3(t) = (1-t)3 . P0 + 3 . t . (1-t)2 . P1 + 3 . t2 . (1-t) . P2 + t3 . P3 É então possível definir uma curva com os 3 pontos, fazendo a ponderação entre os dois segmentos de recta: P R1(t) = (1-t) . P0 + t . P1 R2(t) = (1-t) . P1 + t . P2 P1 1 C(t) = (1-t) . R1 + t . R2 C(t) = (1-t)2 . P0 + 2 . (1-t) . t . P1 + t2 . P2 C2 C1 P0 P0 P3 P2 P2 4 Curvas Bèzier Curvas Bèzier Curva Bèzier de 4 pontos Vantagens É fácil de construir. A forma matricial fica: Os vectores tangentes são definidos automaticamente pelos segmentos de recta. [x y] =[t 3 t2 -1 3 t 1 −3 1 ] 3 −3 1 P0 −6 3 0 P1 3 0 0 P2 0 0 0 P3 Desvantagens Não garante, de forma automática, a continuidade entre os segmentos de curvas. Para que haja continuidade os últimos dois pontos do primeiro segmento e os dois primeiros pontos do segundo segmento têm que ser colineares. Não permite controlo local, isto é, a alteração de um ponto de controlo altera toda a curva. Curvas Hermite Curvas Hermite Características da curva Hermite Construção da curva Hermite É definida por dois pontos de controlo P0 e P1, e dois vectores tangentes (derivadas nos pontos), V0 e V1. Sabemos que tem a forma geral P(t) = a . t3 + b . t2 + c . t + d, com t∈[0, 1]. Passa pelos dois pontos de controlo. Sabemos que passo nos pontos extremos P0 e P1 e as derivadas nesses pontos são V0 e V1. Então: P’(t) = 3 . a . t2 + 2 . b . t + c V0 P0 P(0) = P0, P(1) = P1, P’(0) = V0, P’(1) = V1 P1 V1 V0 P0 P1 V1 5 Curvas Hermite Curvas Hermite Construção da curva Hermite a b P(0) = [0 0 0 1 ] c d a b P(1) = [1 1 1 1 ] c d a b P'(0) = [0 0 1 0 ] c d a b P'(1) = [3 2 1 0 ] c d Curvas Hermite Construção da curva Hermite a b t t 1 c d Como [ P(t) = t 3 Fica: [ P(t) = t 3 t ] 2 2 2 -3 t 1 0 1 ] -2 1 1 P(0) 3 -2 -1 P(1) 0 1 0 P'(0) 0 0 0 P'(1) Construção da curva Hermite As quatro incógnitas a, b, c e d podem ser determinadas resolvendo o sistema de equações: P(0) 0 P(1) = 1 P'(0) 0 P'(1) 3 0 0 1 a 1 1 1 b 0 1 0 c 2 1 0 d Resolvendo em ordem aos coeficientes: a 2 b -3 = c 0 d 1 -2 1 1 P(0) 3 -2 -1 P(1) 0 1 0 P'(0) 0 0 0 P'(1) Curvas Hermite Vantagens É fácil de construir. É adequada para aplicações onde seja útil definir a curva em função da inclinação dos vectores tangentes. Passa nos pontos de controlo. Desvantagens Não garante, de forma automática, a continuidade entre os segmentos de curvas. Para que haja continuidade, o vector de fim do primeiro segmento deve ter a mesma direcção e sentido do vector de inicio do segundo segmento. Não permite controlo local, isto é, a alteração de um ponto de controlo altera toda a curva. 6 Curvas B-Spline Características da curva B-Spline Curvas B-Spline Equação matricial da curva B-Spline É definida por quatro pontos de controlo (P0, P1, P2, P3). Não passa por nenhum dos pontos de controlo. É um tipo de curva mais suave do que as anteriores, com continuidade de segunda ordem entre segmentos. Curvas B-Spline Vantagens É fácil de construir. Garante a continuidade automaticamente. Permite controlo local. [ P(t) = t 3 t 2 -1 3 t 1 -3 1 ] 3 -3 1 P0 -6 3 0 P1 0 3 0 P2 4 1 0 P2 Curvas Catmull-Rom Características da curva Catmull-Rom É definida por quatro pontos de controlo (P0, P1, P2, P3). É formada a partir de uma sequência de curvas Hermite, cujas tangentes são calculadas automaticamente a partir dos pontos de controlo. É traçada uma curva Hermite a cada par de pontos. Desvantagens Não passa nos pontos de controlo. A curva passa pelos pontos de controlo excepto pelo primeiro e último. 7 Curvas Catmull-Rom Curvas Catmull-Rom Construção da curva Catmull-Rom Construção da curva Catmull-Rom Dado um conjunto de pontos de controlo {P0, P1, …, Pn}, queremos a curva que passa por todos os pontos. A curva Catmull-Rom é construída com segmentos de curvas Hermite a cada par (Pi, Pi+1) de pontos de controlo, cujos respectivas tangentes são: (Pi+1 – Pi-1) / 2 e (Pi+2 – Pi) / 2. Multiplicando as duas matrizes de coeficientes obtemos a equação matricial da curva: Considerando a equação matricial da curva Hermite: P(t) = t 3 t 2 [ 2 -3 t 1 0 1 -2 1 1 3 -2 -1 0 1 0 0 0 0 Pi P i +1 Pi +1 − Pi −1 2 Pi +2 − Pi 2 [ 2 -3 t 1 0 1 -2 3 0 0 0 1 − 2 0 0 ou P(t) = t 3 t 2 ] ] 1 -2 1 0 1 -1 0 0 [ P(t) = t 3 t 2 -1 2 t 1 -1 0 ] 3 -3 1 -5 4 -1 0 1 0 2 0 0 Pi - 1 P i Pi +1 Pi +2 1 1 0 Pi - 1 2 2 1 Pi 0 0 2 Pi +1 0 1 0 Pi +2 1 0 0 − Curvas Catmull-Rom Curvas Catmull-Rom Vantagens É fácil de construir. Construção da curva Catmull-Rom Garante a continuidade automaticamente. (Pi+1 – Pi-1) / 2 Permite controlo local. (Pi+2 – Pi) / 2 Passa nos pontos de controlo. 8