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:
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:
A
posição vertical(y) é independente da posição horizontal(x). Ambas são funções
da variável "tempo".
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.
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
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:
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.
Exemplo de curva Bèzier por 4 pontos
Formas
alternativas de traçado de uma Bèzier
https://en.wikipedia.org/wiki/B%C3%A9zier_curve
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.
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.