Capitolul 13

Desenarea cercurilor și a arcurilor cu curbe Bezier

În literatura de specialitate, puteți găsi câteva articole despre aproximarea arcurilor eliptice de către curbele Bezier 1. Prima descrie o tehnică destul de simplă pentru desenarea segmentelor circulare. Să presupunem că, folosind curba Bezier, trageți un arc circular cu o anumită rază și o lățime unghiulară α. Este clar că p0 și p3 sunt punctele de la începutul și sfârșitul arcului, dar cum să setăm p1 și p2. După cum arată diagrama, problema constă în găsirea distanței dintre punctul final și cel de control, adică lungimea segmentului L:








Capitolul 13

Unghiurile dintre segmentele care leagă punctele finale și de control și razele segmentului sunt indicate în diagramă drept linii drepte. De unde vine asta? Din condiția colinearității, care trebuie satisfăcută astfel încât curba să fie netedă. Dacă aveți de gând să utilizați curba Bezier pentru pririsovat au tras un alt arc de cerc cu centrul în același punct și cu aceeași rază, comună punctul final al arcului și cele două puncte de control adiacente trebuie să fie coliniare. Aceasta înseamnă că segmentul care leagă punctul final cu punctul de control va fi perpendicular pe raza cercului.







Dacă lungimea segmentului L este cunoscută, atunci pentru calculul coordonatelor p1 și p2 este suficientă o trigonometrie elementară. Vedeți cât de ușor este să calculați coordonatele punctelor p1 și p2. dacă razele segmentului sunt în unghi drept unul altuia și paralele cu axele de coordonate:


Capitolul 13

În cazul unui unghi de 180 °, calculul coordonatelor p1 și p2 este, de asemenea, trivial.

Calculele primului dintre articolele menționate de mine arată că se obține o aproximare bună dacă luăm multiplicatorul pentru raza:



Cu acest program de aproximare BezierCircles trage două circumferință, dintre care primul este format din două curbe Bezier, iar al doilea (mai precis) - patru.

Acest program demonstrează în mod clar diferența dintre aproximarea curbelor Bezier din metoda DrawEllipse. Programul începe să proceseze metoda DoPage din apelul DrawEllipse pentru a desena o elipsă cu un contur negru. forme de contur a două curbe care rezultă aproximează Bezier, reprezentate în albastru și conturul unei forme formate prin patru curbe - roșu. Nu uitați: Cazul funcțiilor trigonometrice clasei Math sunt exprimate în radiani, astfel încât în ​​loc să împartă un unghi de 4, în formula de calcul L. Am folosit expresia bazată pe Math.PI constantă.







Articole similare

Trimiteți-le prietenilor: