6
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 i n i 0 i n i i n (t) B (t) , (1) no domínio 0 t 1, t , onde: n B (t) (1 t) t, 0 i n, i = - = = - n i Q P (2) 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

Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

Embed Size (px)

Citation preview

Page 1: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

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:

nin

i 0

i n i in

(t) B (t) , (1)

no domínio 0 t 1, t , onde:

nB (t) (1 t) t , 0 i n,

i

=

=

≤ ≤ ∈

= − ≤ ≤

∑n iQ P

(2)

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

Page 2: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

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:

(0) n( )

(1) n( )

′ = −

′ = −

n 1 0

n n n-1

Q P P

Q P P

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].

P0

P1 P2

P3

Q3(t)

154

Page 3: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

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

ni i

i 0

(t) B (t)=

=∑P P

A função d(t) é um polinômio interpolador das distâncias id , 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:

D(t) = (t, d(t)) = n

ni

i 0

B (t)=∑ iD

Os pontos de controle i i(t ,d )=iD são igualmente espaçados em t (it i / n= ).

155

Page 4: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

Como n

n ni

i 0

(i / n)B (t) t[(1 t) t] 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 mind ou acima de maxd . 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 xsen(x) e−= , 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: (0,0) e ( / 4,sen( / 4)) (0.785,0.7071).π π= = ≈0 3P P

Para calcular os pontos interiores, devemos aplicar as seguintes propriedades de derivadas das curvas de Bézier nos pontos extremos:

'(0) 3( )

'(1) 3( )

= −= −

1 0

3 2

P P P

P P P

Estes são os valores dos vetores tangentes à curva normalizados nos seus extremos [3].

156

Page 5: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

Neste exemplo, temos: P’(0) = (0.7071, 0.7071) e P’(1) = (0.816, 0.577). Substituindo os valores, chegamos a: (0.2357,0.2357); (0.513,0.5151)= =1 2P P

Analogamente, para o caso de xe− , chegamos aos seguintes pontos de controle: (0,1); (0.236,0.764); (0.482,0.594); (0.785,0.456)= = = =0 1 2 3Q Q Q Q .

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 tmin tmax umin umax

0 0 1 0 1 1 0.7515 0.7650 0.7513 0.7949 2 0.7521 0.7656 0.7655 0.7836 3 0.7520 0.7654 0.7668 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

Page 6: Algoritmos de Interseções de Curvas de Bézier com Uma … · Figura 1: Curva de Bézier de grau 3. 2. Principais algoritmos de interseções de curvas de Bézier 2.1. Subdivisão

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 xsen(x) e−= , 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 xsen(x) e−= , 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 t = u xP(t) yP(t) xQ(u) yQ(u) 1 0.5 0.3789 0.3699 0.3674 0.6913 2 0.75 0.5807 0.5488 0.5677 0.5660 3 0.875 0.6828 0.6313 0.6740 0.5093 4 0.8125 0.6318 0.5907 0.6203 0.5372 5 0.78125 0.6062 0.5699 0.5938 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