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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmos de Interseções de Curvas de Bézier com Uma ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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 ... · Algoritmos de Interseções de Curvas de Bézier com Uma Aplicação à Localização de Raízes de Equações Rodrigo

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