OralMétodos Numéricos e AplicaçõesAlgoritmos de

Propaganda
Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à
Localização de Raízes de Equações
Rodrigo L.R. Madureira
Programa de Pós-Graduação em Informática, PPGI, UFRJ
21941-590, Cidade Universitária, Ilha do Fundão, Rio de Janeiro, RJ
E-mail: [email protected]
Mauro Antonio Rincon
Luis Menasche Schechter
Departamento de Ciência da Computação, IM, UFRJ
21941-590, Cidade Universitária, Ilha do Fundão, Rio de Janeiro, RJ
E-mail: [email protected], [email protected]
Resumo: As curvas de Bézier receberam essa denominação a partir do trabalho do engenheiro
francês Pierre Bézier Etienne (1919-1999) com sistemas CADCAM na Renault, no início dos
anos 60. Um pouco antes, Paul De Casteljau, um físico e matemático da Citröen, já havia
desenvolvido métodos matemáticos equivalentes para essas curvas, muito importantes na área
de Computação Gráfica, já que muitos softwares disponíveis no mercado utilizam este conceito
[1]. Os principais algoritmos para localizar interseções entre duas curvas de Bézier
encontrados na literatura são: Subdivisão Recursiva de De Casteljau, Subdivisão Intervalar
adotado por Koparkar e Mudur [4] e Bézier Clipping [2]. A proposta deste trabalho trata do
estudo e análise comparativa dos três algoritmos para o cálculo de interseções entre duas
curvas de Bézier, seguidos de um estudo de uma aplicação destes algoritmos para o cálculo de
raízes reais de funções (não necessariamente polinomiais).
1.
Curvas de Bézier
1.1.
Definição
Seja n ≥ 1 um número inteiro. A curva de Bézier de grau n, Qn(t), definida por n + 1
pontos de controle P0, P1, ..., Pn é uma curva definida parametricamente dada por:
n
Qn (t) = ∑ Bin (t)Pi ,
(1)
i =0
no domínio 0 ≤ t ≤ 1, t ∈ ℝ, onde:
n
Bin (t) =   (1 − t) n −i t i , 0 ≤ i ≤ n,
(2)
i
são as funções-base denominadas Polinômios de Bernstein.
A Figura 1 mostra um exemplo de curva de Bézier de grau 3.
1.2.
Principais características
Algumas características importantes das curvas de Bézier são [1]:
1. Para curvas de Bézier de grau n ≥ 2, o polígono formado pelos pontos de controle
P0, P1, ... , Pn formará o polígono de controle. A Figura 1 mostra uma curva cúbica
e seu respectivo polígono de controle.
153
2. O ponto inicial P0 e o ponto final Pn são denominados pontos extremos do polígono
de controle, pois se localizam nas extremidades dele. Os pontos P1, P2, ... , Pn – 1 são
denominados pontos intermediários ou interiores do polígono de controle.
3. Os pontos extremos do polígono de controle também são extremidades da curva.
Assim, P0 = Qn(0) e Pn = Qn(1).
4. Propriedade do fecho convexo: a curva sempre estará contida no fecho convexo
do polígono de controle.
5. Propriedade de invariância afim: Qualquer transformação nos pontos de controle
implica em transformação na curva. A curva é uma aproximação mais suave do
polígono de controle. Assim, a quantidade de vezes que os segmentos do polígono
de controle interceptam a curva será no máximo a quantidade destes segmentos.
6. Derivadas da curva de Bézier de grau n nos pontos extremos:
Qn′ (0) = n(P1 − P0 )
Qn′ (1) = n(Pn − Pn-1 )
P1
P2
Q3(t)
P0
P3
Figura 1: Curva de Bézier de grau 3.
2.
Principais algoritmos de interseções de curvas de Bézier
2.1.
Subdivisão recursiva de De Casteljau
É o processo de divisão de uma curva de Bézier em duas sub-curvas usando o método
de De Casteljau. É muito usado quando se quer aproximar uma curva de Bézier por segmentos
de reta [1].
Quando os segmentos estão bastante subdivididos, eles devem estar suficientemente
próximos de retas. Assim, encontrando o ponto de interseção entre estas retas, encontra-se o
ponto de interseção entre as curvas relacionadas a elas. A Figura 2 mostra três iterações.
Figura 2: Três iterações da subdivisão recursiva [4].
154
2.2.
Subdivisão intervalar de Koparkar e Mudur
Trata-se de um algoritmo semelhante à Subdivisão recursiva de De Casteljau, sendo
que neste caso, cada curva é pré-processada para determinar suas tangentes horizontais e
verticais apenas nos pontos extremos. Os limites destas tangentes definirão o intervalo. A
Figura 3 mostra duas iterações do algoritmo para uma curva de Bézier cúbica.
Figura 3: Duas iterações da subdivisão intervalar [4]
2.3.
Bézier Clipping
Trata-se de um algoritmo proposto em 1990 por Tomoyuki Nishita, professor do
Departamento de Engenharia da Universidade de Tóquio, e Thomas W. Sederberg, professor do
Departamento de Ciência da Computação da Universidade de Brigham Young, nos Estados
Unidos, para o problema da interseção de curvas de Bézier [2].
O funcionamento do algoritmo acontece da seguinte forma: sejam duas curvas de
Bézier P(t) e Q(u) e uma fat line L, uma região que representa a fronteira de Q(u). A Figura 4
mostra um exemplo.
Figura 4: Fat Line para curva de Bézier cúbica Q(u) no processo de Bézier Clipping [2]
P(t) é definida pela equação paramétrica
n
P (t) = ∑ Pi Bin (t)
i =0
A função d(t) é um polinômio interpolador das distâncias d i , 0 ≤ i ≤ n, dos pontos de
controle da curva P(t) à fat line L e pode ter a seguinte representação paramétrica na forma
Bernstein-Bézier:
n
D(t) = (t, d(t)) =
∑ D B (t)
i =0
i
n
i
Os pontos de controle Di = (t i ,d i ) são igualmente espaçados em t ( t i = i / n ).
155
n
Como
∑ (i / n)B
i =0
n
i
(t) = t[(1 − t) + t]n = t , a coordenada horizontal de qualquer ponto
D(t) é de fato o parâmetro t.
Figura 5: Curva de Bézier para representação Bernstein-Bézier de d(t) [2].
Os valores de t para os quais P(t) se encontra fora de L correspondem aos valores de t
para os quais D(t) se encontra abaixo de d min ou acima de d max . Na Figura 5, tem-se que P(t) se
encontra fora de L em t < 0.25 e t > 0.75. Dessa forma, chega-se à uma das etapas do algoritmo
de Bézier Clipping, que é o recorte das partes da curva P(t) que ficarem nesses intervalos. Essas
partes são eliminadas de P(t) [2].
Após o recorte, uma fat line L será aplicada à curva P(t) no intervalo 0.25 ≤ t ≤ 0.75 . O
próximo passo é repetir o procedimento aplicado anteriormente para P(t) na curva Q(u), depois
P(t) terá um novo recorte contra Q(u) e assim alternando a curva de recorte sucessivamente [2].
No caso de múltiplas interseções, a solução é dividir uma das curvas pela metade e
computar as interseções de cada metade com a outra curva [2].
3.
Alguns resultados obtidos para localização de raízes de equações
Exemplo 1: Resolver a equação sen(x) = e − x , no intervalo [0, π / 4] , usando o
algoritmo de Bézier Clipping.
Primeiro, vamos aproximar a função sen(x) por uma curva de Bézier de grau 3 no
intervalo dado.
Neste caso, os pontos de controle extremos devem ser:
P0 = (0,0) e P3 = (π / 4,sen(π / 4)) ≈ (0.785,0.7071).
Para calcular os pontos interiores, devemos aplicar as seguintes propriedades de
derivadas das curvas de Bézier nos pontos extremos:
P '(0) = 3(P1 − P0 )
P '(1) = 3(P3 − P2 )
Estes são os valores dos vetores tangentes à curva normalizados nos seus extremos [3].
156
Neste exemplo, temos:
P’(0) = (0.7071, 0.7071) e P’(1) = (0.816, 0.577).
Substituindo os valores, chegamos a:
P1 = (0.2357,0.2357); P2 = (0.513,0.5151)
Analogamente, para o caso de e− x , chegamos aos seguintes pontos de controle:
Q 0 = (0,1); Q1 = (0.236,0.764); Q 2 = (0.482,0.594); Q 3 = (0.785,0.456) .
A Figura 6 mostra os gráficos obtidos para as curvas.
Figura 6: Aplicação das curvas de Bézier de grau 3 para localização de raízes de equações.
Os resultados encontrados para as três primeiras iterações se encontram na seguinte
tabela:
Iteração
0
1
2
3
tmin
0
0.7515
0.7521
0.7520
tmax
1
0.7650
0.7656
0.7654
umin
0
0.7513
0.7655
0.7668
umax
1
0.7949
0.7836
0.7838
Tabela 1: Resultados para três iterações de Bézier Clipping.
Na iteração 3, são colhidos os seguintes resultados para as curvas:
Curva P(t): xP(0.7520) ≈ 0.5824; yP(0.7520) ≈ 0.5501; xP(0.7654) ≈ 0.5933;
yP(0.7654) ≈ 0.5592;
Curva Q(u): xQ(0.7668) ≈ 0.5817; yQ(0.7668) ≈ 0.5582; xQ(0.7838) ≈ 0.5960;
yQ(0.7838) ≈ 0.5503;
157
Estes resultados se aproximam do ponto de interseção (0.5885, 0.5551) dado pela
solução analítica com precisão de quatro casas decimais.
Exemplo 2: Resolver a equação sen(x) = e − x , no intervalo [0, π / 4] , usando o
algoritmo da Subdivisão Recursiva de De Casteljau.
Os pontos de controle são os mesmos vistos no exemplo 1 para as respectivas curvas.
Após cinco iterações, as sub-curvas que se interceptaram foram aproximadas de retas.
Para uma reta, foi obtida a equação 0.0131x + 0.0282 y – 0.0231 = 0. Para a outra, foi obtida a
equação – 0.0182x + 0.0255y – 0.0037 = 0.
Portanto, deve ser resolvido o sistema linear:
0.0131 x + 0.0282 y – 0.0231 = 0
– 0.0182 x + 0.0255 y – 0.0037 = 0
A solução deste sistema com precisão de quatro casas decimais será x ≈ 0.5721, y ≈
0.5533997. Ou seja, após cinco iterações, os valores já estão relativamente próximos da solução
analítica x ≈ 0.5885, y ≈ 0.5551.
Exemplo 3: Resolver a equação sen(x) = e − x , no intervalo [0, π / 4] , usando o algoritmo da
Subdivisão Intervalar de Koparkar e Mudur.
A tabela a seguir mostra os resultados para cinco iterações do algoritmo.
Iteração
1
2
3
4
5
t=u
0.5
0.75
0.875
0.8125
0.78125
xP(t)
0.3789
0.5807
0.6828
0.6318
0.6062
yP(t)
0.3699
0.5488
0.6313
0.5907
0.5699
xQ(u)
0.3674
0.5677
0.6740
0.6203
0.5938
yQ(u)
0.6913
0.5660
0.5093
0.5372
0.5515
Tabela 2: Resultados para cinco iterações de Subdivisão Intervalar.
Referências
[1] Samuel R. Buss, “3-D Computer Graphics – A Mathematical Introduction with OpenGL”,
Cambridge University Press, 2003.
[2] T. Nishita, T.W. Sederberg, “Curve Intersection Using Bézier Clipping”, pp. 538-549,
Computer-Aided Design 22(9), 1990.
[3] David Salomon, “Curves and Surfaces for Computer Graphics”, Springer, 2006.
[4] T.W. Sederberg, S.R. Parry, “Comparison of Three Curves Intersection Algorithms”, pp.
58-63, Computer-Aided Design Vol. 18.
158
Download