Curba Bézier

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

O curbă Bézier este o curbă parametrică specială, care are o aplicație excelentă în grafica computerizată . O metodă stabilă numeric pentru calcularea curbelor Bézier este algoritmul de Casteljau .

O generalizare a curbelor Bézier în trei dimensiuni se numește suprafața Bézier a cărei triunghi Bézier este un caz specific.

Istorie

Curbele Bezier au fost larg mediatizate în 1962 de către inginerul francez Pierre Bézier, care le-a folosit pentru proiectarea automobilelor de caroserie. Curbele au fost realizate în 1959 de Paul de Casteljau folosind algoritmul de Casteljau .

Bézier a stabilit o modalitate de a face curbe pornind de la două puncte și o linie vectorială, un sistem inovator care încă permite operatorilor grafici să creeze desene curviline precise astăzi. Curbele Bézier pot fi create de multe programe de grafică vectorială, cum ar fi Inkscape , GIMP , Corel Draw , Adobe Illustrator , Adobe Photoshop , Adobe After Effects sau FreeHand sau prin cartografie plată, cum ar fi OCAD .

Analiza cazurilor

Curbele liniare Bézier

Având în vedere punctele P 0 și P 1 , o curbă liniară Bézier este segmentul având punctele date ca extreme. Această curbă este dată de

Curbele quadratice Bézier

O curbă Bézier pătratică este calea trasată de funcția B ( t ), având în vedere punctele P 0 , P 1 și P 2 ,

Fonturile TrueType , precum și grafica vectorială Adobe Flash utilizează spline Bézier formate din curbe pătratice Bézier.

Curbele Bézier cubice

Curba Bezier.svg

Cele patru puncte P 0 , P 1 , P 2 și P 3 în plan sau într-un spațiu tridimensional definesc o curbă cubică Bézier. Curba începe la P 0 merge spre P 1 și se termină la P 3 venind din direcția P 2 . În general, nu trece prin punctele P 1 sau P 2 ; aceste puncte sunt necesare doar pentru a da informații direcționale curbei. Distanța dintre P 0 și P 1 determină cât de mult se mișcă curba în direcția lui P 2 înainte de a se îndrepta spre P 3 .

Forma parametrică a curbei este:

Sistemele moderne de imagistică, cum ar fi PostScript , METAFONT și GIMP, utilizează spline Bézier formate din curbe cubice Bézier pentru a desena forme curbate. Chiar și un instrument simplu, cum ar fi Paint inclus în Windows, are curbe cubice Bézier simple.

Generalizare

Curba de grad Bézier pot fi generalizate după cum urmează. Având în vedere punctele P 0 , P 1 , ..., P n , curba Bézier este:

De exemplu, pentru :

Terminologie

Aceste curbe parametrice pot fi descrise folosind o terminologie specifică. Data:

Polinoamele:

sunt cunoscute sub numele de polinomii de grad Bernstein și sunt definite de:

unde este este coeficientul binomial al pe .

Punctele P i se numesc puncte de control pentru curba Bezier. Poligonul format prin conectarea punctelor prin linii drepte , începând cu P 0 și terminând cu P n , se numește poligon Bézier (sau poligon de control ). Învelișul convex al poligonului Bézier conține curba Bézier.

Notă

  • Curba începe la P 0 și se termină la P n ; aceasta se numește proprietatea de interpolare a punctului final .
  • Curba este o linie dreaptă dacă și numai dacă toate punctele de control se află pe curbă. În mod echivalent, curba Bézier este o linie dreaptă dacă și numai dacă punctele de control sunt coliniare .
  • Începutul (sfârșitul) curbei este tangent la prima (ultima) parte a poligonului Bézier.
  • O curbă poate fi împărțită în orice punct în 2 sub-curbe sau într-un număr arbitrar de sub-curbe, fiecare dintre ele fiind în sine o curbă Bézier.
  • Un cerc nu poate fi format exact dintr-o curbă Bézier, precum și un arc al unui cerc. Cu toate acestea, o curbă Bézier este o aproximare adecvată a unui arc circular mic.

Construcția curbelor Bézier

Curbele liniare

Animația unei curbe liniare Bézier, t în [0,1]
Animația unei curbe liniare Bézier, t în [0,1]

T în funcția unei curbe liniare Bézier poate fi gândit ca fiind descrierea căii lui B ( t ) de la P 0 la P 1 . De exemplu, când t = 0,25 , B ( t ) este un sfert de la P 0 la P 1 . Deoarece t variază de la 0 la 1, B ( t ) descrie întregul segment între P 0 și P 1 .

Curbele cuadratice

Pentru curbele pătratice Bézier este posibil să se construiască puncte intermediare Q 0 și Q 1 deoarece t variază de la 0 la 1:

  • Punctul Q 0 variază de la P 0 la P 1 și descrie o curbă liniară Bézier.
  • Punctul Q 1 variază de la P 1 la P 2 și descrie o curbă liniară Bézier.
  • Punctul B ( t ) variază de la Q 0 la Q 1 și descrie o curbă Bézier pătratică.
Construirea unei curbe pătratice Bézier Animația unei curbe pătratice Bézier, t în [0,1]
Construirea unei curbe pătratice Bézier Animația unei curbe pătratice Bézier, t în [0,1]

Curbele de ordin cubic și superior

Pentru curbele de ordin superior, este necesar un număr mai mare de puncte intermediare.

Pentru o curbă cubică putem construi punctele Q 0 , Q 1 și Q 2 care descriu o curbă liniară Bézier și punctele R 0 și R 1 care descriu o curbă Bézier pătratică:

Construirea unei curbe cubice Bézier Animația unei curbe Bezier cubice, t în [0,1]
Construirea unei curbe cubice Bézier Animație a unui cub Bézier, t în [0,1]

Pentru curbele de ordinul patru este posibil să se construiască punctele intermediare Q 0 , Q 1 , Q 2 și Q 3 care descriu curbele liniare Bézier, punctele R 0 , R 1 și R 2 care descriu curbele Bézier pătratice și punctele S 0 și S 1 descriind o curbă cubică Bézier:

Construirea unei curbe Bézier de ordinul patru Animația unei curbe Bézier de ordinul patru, t în [0,1]
Construirea unei curbe Bézier de ordinul patru Animația unei curbe Bézier de ordinul patru, t în [0,1]

Aplicații în grafică pe computer

Curbele Bézier sunt utilizate pe scară largă în grafica computerizată pentru a modela curbe netede. Deoarece curba este complet conținută în setul convex al punctelor sale de control, punctele pot fi afișate grafic și utilizate pentru a manipula curba intuitiv. Transformările geometrice, cum ar fi translația , omotetica și rotația, pot fi aplicate curbei prin aplicarea transformărilor respective pe punctele de control ale curbei.

Cele mai importante curbe Bézier sunt pătratice și cubice. Curbele de grad superior sunt mult mai scumpe de evaluat. Când trebuie realizate forme mai complexe, mai multe curbe de ordinul doi sau trei sunt „lipite” împreună (respectând anumite condiții de netezire) sub forma unei spline Bézier.

Următorul cod este un exemplu simplu și practic care arată cum se trasează o curbă cubică Bézier în C. Rețineți că coeficientul polinomului este calculat și buclat simplu într-o serie de valori ale De la 0 la 1. În practică, așa se face, deși există și alte metode, cum ar fi algoritmul lui Casteljau , care sunt adesea menționate în discuțiile despre grafică. Acest lucru se datorează faptului că, în practică, un algoritm liniar ca acesta este rapid și mai puțin costisitor decât unul recursiv, precum al lui Casteljau.

 / ************************************************** *****
Cod pentru generarea unei curbe cubice Bezier
Avertisment - cod testat
*************************************************** ***** /
 
  typedef struct
  {
 	plutitor x ;
 	pluteste y ;
  }
  Punct2D ;
 
 / ************************************************** *****
cp este o matrice de 4 elemente în care:
cp [0] este punctul de plecare
cp [1] este primul punct de control
cp [2] este al doilea punct de control
cp [3] este punctul final
 
t este valoarea parametrului, 0 <= t <= 1
*************************************************** ***** /
 
  Point2D PointOnCubicBezier ( Point2D * cp , float t )
  {
 	topor plutitor , bx , cx ;
 	float ay , by , cy ;
 	float tSquared , tCubed ;
 	Rezultatul Point2D ;
 	
 	/ * calculul coeficienților polinomului * /
 	
 	cx = 3.0 * ( cp [ 1 ]. x - cp [ 0 ]. x );
 	bx = 3.0 * ( cp [ 2 ]. x - cp [ 1 ]. x ) - cx ;
 	ax = cp [ 3 ]. x - cp [ 0 ]. x - cx - bx ;
 	
 	cy = 3.0 * ( cp [ 1 ]. y - cp [ 0 ]. y );
 	cu = 3,0 * ( cp [ 2 ]. y - cp [ 1 ]. y ) - cy ;
 	ay = cp [ 3 ]. y - cp [ 0 ]. y - cy - by ;
 	
 	/ * calculul punctului curbei în raport cu t * /
 	
 	tSquared = t * t ;
 	tCubed = tSquared * t ;
 	
 	rezultat . x = ( ax * tCubed ) + ( bx * tSquared ) + ( cx * t ) + cp [ 0 ]. x ;
 	rezultat . y = ( ay * tCubed ) + ( by * tSquared ) + ( cy * t ) + cp [ 0 ]. y ;
 	
 	rezultatul returului ;
  }
 
 / ************************************************** ****************************
ComputeBezier umple o serie de structuri Point2D cu punctele curbei
generat de punctele de control cp. Apelantul trebuie să aloce memorie
suficient pentru rezultatul care este <sizeof (Point2D) * numberOfPoints>
*************************************************** **************************** /
 
  void ComputeBezier ( Point2D * cp , int numberOfPoints , Point2D * curba )
  {
 	plutitor dt ;
 	int i ;
 	
 	dt = 1.0 / ( numberOfPoints - 1 );
 	
 	for ( i = 0 ; i < numberOfPoints ; i ++ )
 		curba [ i ] = PointOnCubicBezier ( cp , i * dt );
  }

Aplicație în Visual Basic 6

 'Opțiune explicită
„acest lucru trebuie introdus într-un formular”
Tastați BezierPoint
    X Ca singur
    Y Ca single
Tip final

'Puneți totul într-o formă cu numele form2
Sub public iDrawBez ()
Dim iPoint ( 5 ) Ca BezierPoint
    
    „Primul și ultimul indice determină Piniziale și Pfinale
    iPoint ( 0 ). X = 1000
    iPoint ( 0 ). Y = 1000
    iPoint ( 1 ). X = 6500
    iPoint ( 1 ). Y = 5500
    iPoint ( 2 ). X = 4000
    iPoint ( 2 ). Y = 5000
    iPoint ( 3 ). X = 9000
    iPoint ( 3 ). Y = 3000
    iPoint ( 4 ). X = 12200
    iPoint ( 4 ). Y = 4000
    iPoint ( 5 ). X = 5200
    iPoint ( 5 ). Y = 3400
        
    DrawBezier iPoint ()

Sfârșitul Sub

Private Sub DrawBezier (iPoint () Ca BezierPoint)
    Dim ax As Single , bx As Single , cx As Single , ay As Single , by As Single , cy As Single , xt As Single , yt As Single
    Dim AXN Ca Single, bxN () Ca unic, cxN () Ca Single, Ayn Ca Single, BYN () Ca unic, Cyn () Ca Single, XTN Ca Single, YTN Ca Single
    
    Dim t Ca Single, I Ca Integer
    Dim iTotPoints Ca Integer
    Dim X Ca întreg
    
    iTotPoints = UBound (iPoint)
    
    ReDim bxN ( iTotPoints ) ca unic
    ReDim cxN ( iTotPoints ) ca unic
    ReDim byN ( iTotPoints ) ca unic
    ReDim cyN ( iTotPoints ) ca unic
    
    Forma2 . Cls
    Forma2 . DrawWidth = 1
    'Trage linii de control
    Forma2 . ForeColor = vbBlue
    
    Pentru X = 0 la iTotPoints - 1
        Forma2 . Linie ( iPoint ( X ). X , iPoint ( X ). Y ) - ( iPoint ( X + 1 ). X , iPoint ( X + 1 ). Y )
    Următorul X

    Forma2 . ForeColor = vbRed
    
    „Următorul este nucleul programului.
    „Toate celelalte sunt doar pentru tragere.
    cxN ( 0 ) = 0
    Pentru X = 1 la iTotPoints - 1
        cxN (X) = iTotPoints * (iPoint (X) X -. iPoint (X - 1) X.) - cxN (X - 1)
    Următorul X
        
    „Calculul toporului
    = iPoint (AXN iTotPoints). X - iPoint ( 0 ). X
    Pentru X = 1 la iTotPoints - 1
        axN = axN - cxN ( X )
    Următorul X
    
    cyN ( 0 ) = 0
    Pentru X = 1 la iTotPoints - 1
        Cyn (X) = iTotPoints * (iPoint (X) Y -. iPoint (X - 1) Y.) - Cyn (X - 1)
    Următorul X
        
    - Calculul lui ay
    Ayn = iPoint (iTotPoints). Y - iPoint ( 0 ). Da
    Pentru X = 1 la iTotPoints - 1
        ayN = ayN - cyN ( X )
    Următorul X
        
    Pentru t = 0 la 1 Pasul 0.0001
        xtN = axN * t ^ iTotPoints
        ytN = ayN * t ^ iTotPoints
    
        Pentru X = iTotPoints - 1 la 1 Pas - 1
            xtN = xtN + cxN ( X ) * t ^ X
            ytN = ytN + cyN ( X ) * t ^ X
        Următorul X
        
        XTN = XTN + iPoint (0). X
        YTN = YTN + iPoint (0). Da
    
        Forma2 . PSet ( xtN , ytN ) 'Trageți linii pentru o curbă mai fină
    Următorul t

    Forma2 . ForeColor = vbGălben
    Forma2 . DrawWidth = 4

    Pentru I = 0 până la 3
        Forma2 . PSET (iPoint (I). X, iPoint (I). Y)
        'Debug.Print "(x" & I & ", y" & I & ")"
    În continuare eu
Sfârșitul Sub

Curbele raționale Bézier

Unele curbe care par simple, precum circumferința , nu pot fi descrise de o curbă Bézier, deci avem nevoie de mai multe grade de libertate .

Curba rațională Bézier adaugă greutăți care pot fi ajustate. Numărătorul este o curbă Bézier în forma Bernstein ponderată, iar numitorul este o sumă ponderată a polinoamelor Bernstein.

Date punctele de control P i , curba rațională Bézier este dată de:

sau pur și simplu

Bibliografie

Elemente conexe

Alte proiecte

linkuri externe