Krzywe Béziera





Wprowadzenie
do teorii krzywych Béziera W tym rozdziale omówię trochę trudniejszy materiał, mam jednak nadzieję, że zapoznasz się z nim w całości. Uważam bowiem, iż omawianie rysowania krzywych w reprezentacji Béziera pozwoli na dokładniejsze zrozumienie, w jaki sposób są rysowane obiekty wektorowe, jak również umożliwi pełne pojęcie następnych rozdziałów. Aby się nie powtarzać, proszę jedynie o dokładne zapoznanie się z podrozdziałem 1.3. Pierre Bézier to francuski matematyk, pracownik firmy Renault. Podczas prac projektowych nad nowymi karoseriami samochodowymi opracował model opisu krzywych. A teraz odrobina matematyki. Krzywe Béziera są parametrycznymi krzywymi trzeciego stopnia i znajdują szerokie zastosowanie w modelowaniu kształtu figur i powierzchni. Przykładem może tu być modelowanie kształtu nadwozi samochodów. Tego rodzaju krzywe są podstawą działania wszystkich poważniejszych programów do tworzenia i edycji rysunków wektorowych (CorelDRAW, Adobe Ilustrator i inne). Kształt krzywej Béziera jest określony czterema punktami: dwoma punktami krańcowymi krzywej (tzw. węzłami) (P1, P4) oraz dwoma punktami kontrolnymi (P2, P3). Krzywa interpoluje dwa krańcowe punkty krzywej i aproksymuje dwa punkty kontrolne.
Jeżeli oznaczysz współrzędne tych czterech punktów jako:
P1 (x1 , y1), P2 (x2 ,y2), P3 (x3 ,y3), P4 (x4 ,y4)
to kształt krzywej Béziera określą dwa równania parametryczne:
x(t) = (1- t)3 x1 + 3t (1- t)2 x2 + 3t2 (1- t) x3 + t3 x4
y(t) = (1- t)3 y1 + 3t (1- t)2 y2 + 3t2 (1- t) y3 + t3 y4
gdzie parametr t przybiera wartości z przedziału 0 ≤ t ≤ 1. W programie CorelDRAW każdą krzywą (krzywą jest także okrąg, kwadrat, itp.) definiuje się, jak wspomniałem, podając węzły i punkty kontrolne. Istnieje także pojęcie segmentu, w skład którego wchodzą dwa węzły (na jego końcach) i dwa punkty kontrolne. Ponieważ segmenty sąsiadują ze sobą, dlatego z każdym węzłem związane są tylko dwa punkty kontrolne.
Na krzywej można wykonać następujące czynności:
ω przesunąć węzeł – zmieni się wygląd jednego lub dwóch segmentów (gdy węzeł należał do dwóch segmentów)
, ω przesunąć punkt kontrolny – zmieni się kształt jednego segmentu,
ω dodać węzeł – jeden segment zostanie podzielony na dwa segmenty, pomiędzy którymi znajdzie się dodany węzeł,
ω usunąć węzeł – zostaną usunięte także dwa punkty kontrolne, a dwa sąsiednie segmenty zostaną połączone w jeden segment, którego kształt będą określały pozostałe sąsiednie punkty kontrolne,
ω połączyć dwa końcowe węzły – powstanie jeden węzeł z punktami kontrolnymi tak ustawionymi, aby przejście krzywej przez ten węzeł było „gładkie”,
ω przekształcić segment na prostą, krzywą, itp. – powoduje to automatyczne ustawienie punktów kontrolnych w ten sposób, aby uzyskać żądany kształt.
Co to oznacza w praktyce? Otóż:
1. jeżeli chcesz uzyskać linię prostą, musisz tak ułożyć punkty kontrolne, aby leżały na linii, łączącej oba węzły;
2. gdy przesuniesz jeden z punktów kontrolnych tak, aby nie leżał na prostej, łączącej dwa węzły, wtedy segment „wybrzuszy” się w taki sposób, by w węźle segment był styczny do linii, łączącej węzeł z punktem kontrolnym;
3. gdy oddalisz punkt kontrolny od węzła, krzywa będzie łagodniej przechodzić przez węzeł. W przypadku bardziej skomplikowanej krzywej trzeba opisać ją większą liczbą węzłów. Oczywiście, zwiększy się też liczba segmentów, które będą łączyć się ze sobą w węzłach (oprócz węzłów końcowych). Można wtedy wyróżnić trzy charakterystyczne sposoby łączenia segmentów krzywej:
a. punkty kontrolne, należące do węzła, są symetryczne – otrzymuje się wtedy gładkie przejście krzywej przez węzeł;
b. punkty kontrolne, należące do węzła, są współliniowe i niesymetryczne – krzywa dalej przechodzi gładko przez węzeł, ale po obu stronach węzła jest inny przebieg wybrzuszeń krzywej;
c. punkty kontrolne nie są współliniowe – przejście krzywej przez węzeł nie jest gładkie, ponieważ sąsiednie segmenty będą styczne do różnych prostych.

Zmiana kształtu krzywych
Każdy obiekt wektorowy możesz poddawać dowolnym modyfikacjom, przesuwając węzły, zmieniając położenie punktów kontrolnych, usuwając lub dodając węzły czy też wykonując na nich inne operacje. Narzędziem, które służy do modyfikacji węzłów, jest Shape Tool . Narysuj dowolną krzywą (odręcznie), a następnie zaznacz ją narzędziem Shape Tool. Pojawią się wszystkie węzły tej krzywej. Możesz chwycić dowolny węzeł i przesunąć go w inne miejsce, a krzywa zostanie automatycznie dopasowana tak, aby przechodziła przez węzeł. Poeksperymentuj trochę samodzielnie, przeciągając węzły i punkty kontrolne. W trakcie modyfikacji kształtu krzywej pojawi się też przypisany do tego narzędzia odpowiedni pasek właściwości:


1. dodaje węzeł pośrodku segmentu poprzedzającego wskazany węzeł,
2. usuwa zaznaczony węzeł,
3. łączy dwa zaznaczone węzły w jeden,
4. rozdziela wskazany węzeł na dwa niezależne. Dwa węzły, które powstaną, znajdują się dokładnie w tym punkcie, sprawiając wrażenie jednego węzła, dlatego polecam nieznaczne przesunięcie jednego z nich, gdyż przy dalszych modyfikacjach możesz zapomnieć, który węzeł rozdzieliłeś,
5. przekształca segment na prostą,
6. przekształca segment na krzywą,
7. tworzy ostry węzeł,
8. tworzy gładki węzeł,
9. tworzy ostry węzeł,
10. zmienia kierunek przebiegu krzywej, czyli tak, jakbyś rysował ją od drugiej strony,
11. łączy wskazane węzły, wstawiając segment pomiędzy nie,
12. wydobywa podścieżkę, czyli tworzy ze wskazanego fragmentu osobny obiekt. Krzywa musi być jednak wcześniej rozdzielona,
13. automatyczne zamyka krzywą,
14. skaluje węzły,
15. obraca węzły,
16. wyrównuje węzły,
17. tryb elastyczny,
18. zaznacza wszystkie węzły,
19. wygładza krzywą poprzez redukcję węzłów.
W trakcie pracy z węzłami możesz także zaznaczyć kilka z nich i wykonywać daną czynność na wszystkich. Węzły zaznacza się tak samo, jak obiekty, muszą to być jednak węzły, należące do jednej krzywej. Do każdego węzła (oprócz początkowego) przypisany jest jeden segment, który poprzedza ten węzeł. Tak więc wskazując węzeł, możesz też wykonywać czynności na przypisanym węzłowi segmencie. Gdy przy wskazanym węźle (lub wskazanych węzłach) wybierzesz dodawanie węzłów, to zostanie on dodany w połowie poprzedniego segmentu. Usunięcie węzłów spowoduje natomiast uproszczenie przebiegu krzywej, gdyż pozostaną tylko węzły sąsiednie. Dodać możesz też węzeł w dowolnym miejscu segmentu, po prostu kliknij szybko dwa razy to miejsce. Każda krzywa może składać się z wielu ścieżek. Jeżeli będziesz chciał w danym miejscu przerwać krzywą, zaznacz węzeł i wybierz przycisk, rozłączający węzły. W jego miejsce zostaną wstawione dwa węzły. Aby je zobaczyć, przesuń nieznacznie jeden z nich. Możesz także połączyć dwa węzły jednej krzywej w jeden, muszą to być jednak węzły skrajne (czyli początkowy, końcowy lub węzły powstałe w wyniku rozłączenia). Aby ścieżkę oddzielić od krzywej i utworzyć z niej osobny obiekt, należy zaznaczyć dowolny węzeł, należący do tej krzywej i wybrać przycisk Extract Subpath (12). Nie sugeruj się tym, że rozdzielone ścieżki, które nie mają ze sobą wspólnych węzłów i leżą z dala od siebie, są już oddzielnymi obiektami. Jako przykład niech posłuży mi mała litera i. Kropka nie ma wspólnej części z kreseczką, a przecież razem tworzą jeden obiekt. Każdy segment krzywej może być prosty lub zakrzywiony. Gdy segment jest prostą, węzły na jego końcach nie mają punktów kontrolnych od strony segmentu. Gdy przekształcisz prostą na krzywą, pojawią się punkty kontrolne, które możesz teraz dowolnie przemieszczać. Zamiana w drugą stronę (czyli z krzywej na prostą) spowoduje automatyczne usunięcie odpowiednich punktów kontrolnych i tym samym połączenie węzłów prostym odcinkiem. W przypadku, gdy segment jest krzywą, możesz przy pomocy myszy modelować jego kształt. Chwyć segment w dowolnym miejscu i przeciągnij wskaźnik myszy w nowe położenie.

Rozróżnia się trzy rodzaje węzłów:
ω węzeł symetryczny – punkty kontrolne węzła znajdują się zawsze po jego przeciwnych stronach i są tak samo od niego oddalone. Przesunięcie jednego z nich powoduje odpowiednie przesunięcie drugiego,
ω węzeł gładki – punkty kontrolne znajdują się zawsze po przeciwnych stronach węzła, lecz mogą być w różnych odległościach od niego. Przesunięcie jednego z nich nie spowoduje zmiany odległości drugiego punktu kontrolnego od węzła, lecz ewentualnie taką zmianę położenia, aby nadal leżał on na wspólnej linii,
ω węzeł ostry – każdy z punktów kontrolnych można przesuwać niezależnie od drugiego. Przejście krzywej w węźle może więc być dowolne. Dwa krańcowe węzły krzywej możesz połączyć, tworząc tym samym ścieżkę zamkniętą. Należy wybrać w tym celu przycisk Auto-Close Curve (13). Jednak, gdy krzywa została podzielona na wiele ścieżek, zostaną zamknięte wszystkie z nich. Aby połączyć segmentem dwa dowolne krańcowe węzły z dowolnych ścieżek (ale należące do jednej krzywej), musisz je zaznaczyć i wybrać przycisk Extent Corve to Close (11). W przypadku bardzo skomplikowanych krzywych możesz zażądać automatycznej redukcji węzłów. Czynność ta powoduje usunięcie węzłów, ale w taki sposób, aby nie spowodowało to zbytniej zmiany jej kształtu. Najprawdopodobniej nie zauważysz jednak efektu tej czynności, gdyż jej celem jest właśnie takie zmniejszenie liczby węzłów, aby krzywa nie różniła się od poprzedniej. O tym, jak bardzo CorelDRAW będzie się starał usunąć węzły, możesz decydować suwakiem Curve Smoothness (19). Gdy zaznaczysz kilka węzłów i chcesz je przeciągnąć w inne miejsce, wszystkie zostaną przesunięte o taką samą drogę. Jeżeli jednak chciałbyś je przesunąć proporcjonalnie (tak jak zmienia się rozmiar obiektów), to należy zaznaczyć przycisk Stretch and Scale Nodes (14). Pojawi się wtedy osiem uchwytów, podobnie jak przy zaznaczonym obiekcie. Przycisk Rotate and Skew Nodes (15) wyświetla natomiast uchwyty obrotu i pochylania. Przycisk Align Nodes (16) umożliwia wyrównanie zaznaczonych węzłów w pionie i/lub poziomie. Gdy pozostawisz zaznaczone oba pola (w poziomie i w pionie), zaznaczone punkty znajdą się w tym samym miejscu i optycznie będą sprawiały wrażenie, że jest to jeden punkt (wyrównywanie odbywa się zawsze względem później utworzonego węzła lub później zaznaczonego). Tryb elastyczny, wybierany przyciskiem Elastic Mode (17), pozwala zmienić sposób przesuwania kilku zaznaczonych węzłów. Standardowo każdy z nich będzie przesunięty o taką samą odległość, gdy jednak włączysz tryb elastyczny, przesunięcie węzłów będzie proporcjonalne do odległości od węzła przeciąganego.

Zmiana kształtu obiektów
Zmiana kształtu może dotyczyć nie tylko krzywych, ale także i dowolnych obiektów (oczywiście, oprócz wstawionych map bitowych). Zmieniać możesz prostokąty, elipsy, gwiazdy, tekst itp. Prostokątowi możesz zaokrąglić rogi, chwytając narzędziem Shape Tool za dowolny z jego wierzchołków. Podobnie też możesz modyfikować elipsę, przekształcając ją w łuk lub wycinek. Aby zdecydować, czy chcesz otrzymać łuk, czy też wycinek, możesz posłużyć się przyciskami (1) na pasku właściwości (rysunek 8.7), umożliwiającymi przełączanie się między tymi dwoma obiektami.
Podczas przeciągania węzła możesz przytrzymać klawisz Ctrl, aby zmienić kąt ramion wycinka (lub łuku) o 15 stopni. Dokładny kąt początku i końca ramion ustalisz na pasku w polach Starting and Ending Angles (2). Ostatni przycisk (3) służy do zamiany wartości kąta początkowego z końcowym i odwrotnie, dzięki czemu otrzymujesz jakby dopełnienie elipsy. Możesz też określić, czy rysujesz łuk, czy elipsę już podczas przeciągania węzłów. Mianowicie, gdy puścisz przycisk myszy wewnątrz elipsy, utworzysz wycinek, a kiedy puścisz na zewnątrz elipsy – łuk. Wypróbuj również zmianę kształtu na gwieździe i wieloboku (tam zmieniają się automatycznie wszystkie podobne węzły, analogicznie jak w prostokącie zmieniasz wszystkie narożniki jednocześnie). Gdybyś jednak chciał dowolnie modyfikować kształt obiektów, to poznane dotąd metody nie pozwoliłyby Ci na to. Jeżeli chcesz np. zmienić wygląd tekstu tak ja na rysunku 8.9, musisz go przekształcić na krzywe. Podobnie też musisz postąpić z innymi obiektami. Pamiętaj jednak, iż po przekształceniu obiektów na krzywe tracisz właściwości, przypisane niektórym z nich, np. po przekształceniu tekstu na krzywe nie będziesz miał możliwości poprawienia błędów, dopisania liter, itp., gdyż to już nie jest tekst tylko krzywa. Aby tego dokonać, zaznacz dowolny obiekt i wybierz z górnego menu Arrange| Convert To Curves. Możesz też skorzystać z kombinacji klawiszy Ctrl+Q.
Można jedynie zaokrąglić narożniki prostokąta, ale jeżeli przekształcisz go na krzywe, to każdy z narożników staje się niezależnym węzłem, który możesz dowolnie przesuwać czy też zmieniać położenie punktów kontrolnych (na rysunku 8.10 lewy górny narożnik został przesunięty w kierunku przeciwległego, a prawy bok lekko zaokrąglony).

Ćwiczenie 8.1.
Spróbuj teraz omówione w tym rozdziale wiadomości wykorzystać w praktyce. Przećwicz sobie zaznaczanie węzłów zarówno tych, które da się zaznaczyć prostokątnym obszarem, jak i tych, które będziesz musiał zaznaczać pojedynczo. Podczas przeciągania pamiętaj zawsze o przytrzymaniu wciśniętego klawisza Ctrl, gdyż tylko dzięki temu będziesz w stanie zachować proste odcinki. Twoim celem będzie zrobienie napisu, na którym przeciągniesz i pogrubisz dolną kreseczkę litery C, by później umieścić na niej dodatkowy napis. Napisz wyraz Corel i wybierz taką czcionkę, dla której dolna część literki C jest prosta. Ja wybrałem czcionkę BankGothic.
Ponieważ literki wyrazu leżą zbyt daleko od siebie, poleć wskazanie napisu narzędziem Shape Tool i zmiejsz odstępy między literami, przeciągając strzałkę z prawej strony w lewo. Potem przekształć tekst w krzywe poleceniem Arrange|Convert to Curves. Teraz wybierz narzędzie Shape Tool i zaznacz nim dolne węzły literki C, najlepiej przeciągając z wciśniętym lewym przyciskiem myszy tak, by wszystkie znalazły się wewnątrz zaznaczenia. Potem chwyć za jeden z zaznaczonych węzłów i z wciśniętym klawiszem Ctrl przeciągnij je w dół.
Teraz trudniejsze zadanie: musisz zaznaczyć ponownie kilka węzłów, lecz nie da się tego zrobić tak, jak poprzednio, gdyż w ten sposób zaznaczyłbyś także te, których nie będziesz przeciągać. Najlepiej jest więc zaznaczać te węzły, klikając je z przytrzymanym klawiszem Shift. Następnie, trzymając wciśnięty klawisz Ctrl, przeciągnij je nieznacznie w dół. Zaznacz teraz te węzły, które leżą w prawej dolnej części literki i przeciągnij je z przytrzymanym klawiszem Ctrl w prawo. Wystarczy napisać kolejny tekst, przeciągnąć go na dolną kreseczkę literki C i odpowiednio przeskalować.