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