Computação Gráfica

Curvas Paramétricas

Prof.Dr. Márcio Sarroglia Pinho

Introdução

A forma mais comum de representação de curvas é aquela em que uma das coordenadas é obtida em função da outra. Ou seja, y = F(x) ou x = F(y)

Esta forma de representação, porém possui alguns inconvenientes quando estamos trabalhando com modelagem geométrica. Entre estes inconvenientes estão:

 

laco.gif (2700 bytes)

 interpola.gif (4213 bytes)


Curvas paramétricas

A primeira classe de curvas paramétricas é aquela em que o comportamento da curva, ao longo do tempo, em relação a cada um dos eixos é definida por uma equação independente. A forma geral destas curvas pode ser expressa por :

x = F(u)
y = F(u)

 Exemplos do uso desta formulação podem ser:

x = cos(t)
y = sin(t)

x = cos(t) * R + CX
y = sin(t) * R + CY

x = sen(t)
y = t * t

O uso deste tipo de técnica para a criação de curvas paramétricas é bastante útil em um processo de modelagem. Porém, não soluciona dois dos problemas levantados para as curvas da forma Y = F(X):

Composições ponderadas

Às técnicas de obtenção de equações de curvas dados seus pontos e suas derivadas, chama-se, normalmente, interpolação, aproximação ou composição ponderada. Destas técnicas destacam-se 3 formulações: curvas Bèzier, curvas Hermite e curvas Spline.


Curvas BÉZIER

Analisando a equação paramétrica da reta entre os ponto P0 e P1 chega-se a conclusão de que trata-se de uma média ponderada, ou de um balanço, entre P0 e P1 onde o peso de cada ponto é definido de forma que quanto mais um deles pese no resultado, menos o outro influencie no mesmo.

reta.gif (2014 bytes) 

Para obter esta ponderação os pesos de P0 e de P1 podem ser expressos pela funções (para o parâmetro ponderador "t" entre 0 e 1):

Peso de P0 = 1 - T
Peso de P1 = T

Com isto a equação paramétrica da reta fica: P(t) = (1-t) * P0 + t * P1

Curvas Bèzier por 3 pontos

Caso seja preciso ponderar 3 pontos (P0, P1 e P2) gerando uma curva, a formulação é bastante semelhante:

Considerando duas retas R1 e R2, respectivamente, entre P0 e P1 e entre P1 e P2, representadas na forma paramétrica apresentada acima, é possível obter uma curva P0-P1-P2 fazendo simplesmente a ponderação entre R1 e R2 usando para isto os pesos "T" e "1 - T".

O desenvolvimento analítico desta idéia é o seguinte:

Sejam R1 e R2 as referidas retas definidas parametricamente por,

R1: (1-t) * P0 + t * P1

R2: (1-t) * P1 + t * P2

 bezier3pontos.gif (2817 bytes)

 Exemplo de curva Bèzier por 3 pontos

Reaplicando novamente a idéia de ponderação tem-se a curva C1 definida pela seguinte equação:

C1 : (1-t) * R1 + t * R2

que ao ser desenvolvida dá origem a

 C1(t) = (1-t)2 * P0 + 2 * (1-t) * t * P1 + t2 * P2

para t entre 0 e 1.

Curvas Bèzier por 4 pontos

A obtenção das curvas Bèzier para 4 pontos (P0-P1-P2-P3) segue o mesmo raciocínio, desta feita, ponderando duas curvas, C1->(P0-P1-P2) e C2->(P1-P2-P3). O desenvolvimento desta idéia é o seguinte, com base na figura abaixo:

DuasBz3Ptos.gif (3412 bytes) 

 Dadas as curvas C1 e C2, definidas parametricamente, em função de "t", a curva C3 pode ser expressa por:

 C3 = (1-t) * C1 + t * C2

 cujo desenvolvimento resulta em

 C3(t) = (1-t)3 * P0 + 3 * t * (1-t)2 * P1 + 3 * t2 * (1-t) * P2 + t3 * P3

 para t entre 0 e 1.

 bezier4pontos.gif (2850 bytes)
Exemplo de curva Bèzier por 4 pontos


Exemplos:


Curvas HERMITE

Tentando solucionar o problema de definição de uma curva dados seus pontos extremos e as derivadas nestes pontos surgiu a formulação de HERMITE. O desenvolvimento desta formulação vem a seguir.

Uma curva de grau 3 genérica pode ser expressa por

 P(t) = a * t3 + b * t2 + c * t + d (1)

Se for necessário criar uma curva P(t), para t entre 0 e 1, que tenha os extremos nos pontos P0 e P3 e tenha como derivadas, nestes pontos, os vetores V0 e V3 respectivamente, tem-se como verdadeiras as seguintes definições:

 P(0) = P0 P(1) = P3 (2)

P'(0) = V0 P'(1) = V3 (3)

P'(t) = 3 * a * t2 + 2 * b * t + c (4)

Colocando as equações (1) e (4) na forma matricial(a fim de facilitar os cálculos) teremos:

Equação (1):

 Equação (4):

 

 Objetivo agora é obter os valores das entradas da matriz-coluna, a qual dá-se o nome de matriz de coeficientes.

 Para isto, substitui-se, nesta forma de representação, as afirmativas de (2) e (3) obtendo-se 4 equações.

      

       

 

Como queremos obter os valores de 4 incógnitas (a,b,c,d) podemos colocar as 4 equações numa notação matricial:

Isolando a matriz de coeficientes(que é o objetivo deste processo) temos a seguinte equação matricial:

 À matriz-coluna, de pontos e de derivadas dá-se o nome de matriz geometria de Hermite(MGh), e à matriz 4x4, matriz de Hermite(Mh).

Logo a equação (1)

 

pode ser reescrita como:

 Esta equação, que ao ser desenvolvida gera:

 

A especificação das derivadas em P0 e P3 deve ser feita através de vetores, conforme a figura abaixo.

 vetor.gif (3059 bytes)

 

A influência destes vetores no comportamento da curva se dá pela determinação de como a curva sai do ponto inicial e chega ao ponto final.


Exemplos de Curvas Hermite

Exemplo: https://codepen.io/liorda/pen/KrvBwr


Curvas SPLINE


Exemplos de Curvas Spline

 


CATMULL - ROM

Montada a partir de uma sequência de curvas Hermite. O cálculo das tangentes de forma automática a partir dos quatro pontos fornecidos pelo usuário.

Para gerar a curva, traça-se uma Hermite entre cada par de pontos.

A curva passa pelos pontos definidos pelo usuário (menos o primeiro e o último).

Exemplo de Curva Catmull-Rom

A tangente em cada ponto é dada por:


Vantagens

Exemplo: https://qroph.github.io/2018/07/30/smooth-paths-using-catmull-rom-splines.html

FIM.