🎯 Krzywe Béziera
Przeciągaj punkty kontrolne i krokuj konstrukcję de Casteljau, by zobaczyć budowę krzywej Beziera, a potem porównaj ją z B-splajnem tego samego stopnia.
O krzywych Béziera i splajnach
Krzywa Béziera to gładka krzywa parametryczna zdefiniowana zbiorem punktów kontrolnych, wynaleziona niezależnie przez Pierre'a Béziera w Renault i Paula de Casteljau w Citroën w latach 60. XX wieku do projektowania nadwozi samochodów. Krzywa stopnia n jest dana wielomianem Bernsteina B(t) = Σ Pᵢ ⋅ C(n,i) ⋅ (1−t)ⁿ⁻ᶦ ⋅ tᶦ, gdzie t ∈ [0,1], a C(n,i) to współczynniki dwumianowe. Algorytm de Casteljau oblicza to geometrycznie poprzez wielokrotną liniową interpolację między parami punktów — elegancka, rekurencyjna konstrukcja, która jest numerycznie stabilna i wizualnie intuicyjna.
Symulator pozwala umieszczać punkty kontrolne kliknięciem, przeciągać je, aby zmieniać kształt krzywej w czasie rzeczywistym, łączyć segmenty sześciennych krzywych Béziera w gładkie splajny (ciągłość C¹ lub G¹) i obserwować animowany wielokąt podziału na każdym kroku konstrukcji de Casteljau, gdy parametr t przebiega od 0 do 1.
Najczęściej zadawane pytania
Czym jest algorytm de Casteljau?
Algorytm de Casteljau oblicza wartość krzywej Béziera przy parametrze t poprzez wielokrotną liniową interpolację między sąsiednimi punktami kontrolnymi. Dla krzywej sześciennej (4 punkty kontrolne P₀–P₃) pierwsza runda daje 3 punkty pośrednie, druga daje 2, a trzecia daje pojedynczy punkt krzywej B(t). Punkty pośrednie tworzą trójkąt odcinków, którego przeciwprostokątna jest styczna do krzywej — widoczna w animacji jako poruszający się „wielokąt podziału”.
Dlaczego sześcienne krzywe Béziera są tak powszechnie używane?
Krzywe sześcienne (stopień 3, 4 punkty kontrolne) oferują minimalny stopień potrzebny do niezależnego określenia obu końców i obu kierunków stycznych, dając pełną kontrolę kształtu przy najmniejszej liczbie parametrów. Krzywe wyższego stopnia mogą oscylować (zjawisko Rungego) i trudniej je intuicyjnie edytować. Niemal każdy format grafiki wektorowej — SVG, PDF, PostScript, czcionki TrueType/OpenType i animacje CSS — używa sześciennych krzywych Béziera jako podstawowego elementu kształtu.
Czym jest B-splajn i czym różni się od krzywej Béziera?
B-splajn (basis spline) to krzywa wielomianowa odcinkami, zdefiniowana przez wektor węzłów określający, gdzie łączą się segmenty wielomianowe. W przeciwieństwie do krzywej Béziera każdy punkt kontrolny B-splajnu wpływa tylko na lokalny obszar krzywej (nośnik jest skończony), więc przesunięcie jednego punktu nie zmienia kształtu całej krzywej — właściwość zwana kontrolą lokalną. NURBS (nierównomierne wymierne B-splajny) rozszerzają B-splajny o wagi i są standardową reprezentacją w oprogramowaniu CAD, takim jak AutoCAD i SolidWorks.
Jak zapewnić gładkie połączenia między segmentami sześciennymi?
Dla ciągłości C¹ (zgodność pierwszych pochodnych) ostatni punkt kontrolny segmentu k, pierwszy punkt kontrolny segmentu k+1 i wspólny punkt końcowy muszą być współliniowe, z równymi odległościami od punktu końcowego. Zapewnia to identyczny kierunek i wielkość stycznej w miejscu połączenia. Dla ciągłości G¹ (zgodność kierunku stycznej, niekoniecznie wielkości) wymagana jest tylko współliniowość — słabszy, ale wizualnie gładki warunek stosowany w projektowaniu czcionek.
Czym są wielomiany bazowe Bernsteina?
Wielomiany Bernsteina B(i,n,t) = C(n,i)⋅tᶦ⋅(1−t)ⁿ⁻ᶦ tworzą bazę dla wielomianów stopnia n na [0,1]. Są nieujemne, sumują się do 1, a każdy osiąga unikalne maksimum przy t = i/n. Ponieważ krzywa jest ważoną średnią punktów kontrolnych (wagi = wielomiany Bernsteina), krzywa zawsze leży wewnątrz otoczki wypukłej wielokąta kontrolnego — kluczowa właściwość geometryczna ułatwiająca przycinanie i wyznaczanie przecięć krzywych Béziera.
Jak krzywe Béziera są wykorzystywane w typografii?
Czcionki TrueType używają kwadratowych krzywych Béziera (3 punkty kontrolne na segment) przechowywanych jako zwarte dane liczbowe do definiowania konturów glifów. Czcionki OpenType mogą używać segmentów kwadratowych (jak w TrueType) lub sześciennych (jak w PostScript Type 1). Podczas wyświetlania rasteryzator oblicza krzywe przy odpowiedniej rozdzielczości i wypełnia wnętrze — dlatego skalowalne czcionki wyglądają ostro w każdym rozmiarze. Pojedynczy znak ASCII może składać się z 10–30 segmentów Béziera.
Czym jest właściwość otoczki wypukłej?
Otoczka wypukła zbioru punktów to najmniejszy wypukły obszar zawierający wszystkie te punkty — jak kształt powstały przez naciągnięcie gumki wokół punktów. Ponieważ krzywe Béziera są wypukłymi kombinacjami swoich punktów kontrolnych (wagi Bernsteina są nieujemne i sumują się do 1), krzywa zawsze pozostaje wewnątrz otoczki wypukłej wielokąta kontrolnego. Właściwość ta jest wykorzystywana w wykrywaniu kolizji i algorytmach przecięcia promienia z krzywą: jeśli promień nie trafia w otoczkę wypukłą, nie może trafić w krzywą.
Jak krzywa Béziera wiąże się z funkcjami łagodzenia animacji?
CSS i SVG używają sześciennych krzywych Béziera do definiowania funkcji łagodzenia animacji, określanych jako cubic-bezier(x₁, y₁, x₂, y₂), gdzie dwa punkty kontrolne (z punktami końcowymi ustalonymi na (0,0) i (1,1)) określają, jak szybko zmienia się animowana wartość w czasie. Znana funkcja „ease-in-out” to w przybliżeniu cubic-bezier(0.42, 0, 0.58, 1). Krzywa mapuje znormalizowany czas (t) na znormalizowany postęp, więc stromy odcinek oznacza szybką zmianę, a płaski — powolną.
Czy krzywe Béziera mogą dokładnie reprezentować okręgi?
Nie — wymierne krzywe Béziera (NURBS z wagami niejednostkowymi) mogą dokładnie reprezentować przekroje stożkowe, w tym okręgi, ale wielomianowe krzywe Béziera nie. Jednak pojedynczą ćwiartkę okręgu można bardzo dokładnie przybliżyć sześcienną krzywą Béziera z punktami kontrolnymi przy (R, kR) i (kR, R), gdzie k ≈ 0,5523. Maksymalny błąd tego przybliżenia to około 0,00027R, co czyni go niedostrzegalnym przy typowych rozdzielczościach wyświetlania.
Czym jest podniesienie stopnia w krzywych Béziera?
Podniesienie stopnia to proces reprezentowania tej samej geometrycznej krzywej za pomocą jednego dodatkowego punktu kontrolnego (i stopnia), bez zmiany kształtu krzywej. Segment liniowy można podnieść do kwadratowego, potem do sześciennego itd. Jest to przydatne w algorytmach wymagających, aby wszystkie krzywe miały ten sam stopień — na przykład przy łączeniu krzywych z różnych źródeł. Nowe punkty kontrolne oblicza się jako ważone średnie oryginalnych, a proces jest zawsze dokładny (bez przybliżeń).
O tej symulacji
Ten symulator wizualizuje, jak krzywa Béziera jest budowana z garstki punktów kontrolnych za pomocą algorytmu de Casteljau, tej samej rekurencyjnej metody interpolacji stosowanej w całej grafice komputerowej. Możesz wybrać stopień krzywej od 1 (liniowy) do 5 (kwintyczny), przeciągać każdy punkt kontrolny po płótnie i przesuwać parametr t, by obserwować, jak linie konstrukcyjne zbiegają się na krzywej. Przełącznik nakłada też jednorodny sześcienny B-splajn, dzięki czemu możesz bezpośrednio porównać obie techniki. Wszystko na ekranie jest rysowane na żywo z tej samej matematyki wielomianów Bernsteina, która stoi za czcionkami, ścieżkami SVG i oprogramowaniem CAD.
🔬 Co pokazuje
Niebieskie kropki to punkty kontrolne P₀…Pₙ, a przerywana szara linia to wielokąt kontrolny je łączący. Przy wybranym parametrze t kolorowe linie konstrukcyjne pokazują każdą rundę liniowej interpolacji algorytmu de Casteljau, zbiegając się w pojedynczy pomarańczowy punkt, który kreśli pomarańczową krzywą Béziera, gdy t przebiega od 0 do 1. Krzywa zawsze zaczyna się w P₀, kończy w Pₙ i nigdy nie wykracza poza otoczkę wypukłą wielokąta kontrolnego.
🎮 Jak korzystać
Przeciągnij dowolny niebieski punkt kontrolny, aby zmieniać kształt krzywej w czasie rzeczywistym. Selektor stopnia przełącza między 2 a 6 punktami kontrolnymi (od liniowego do kwintycznego); suwak t przesuwa pojedynczy punkt wzdłuż krzywej, a Play automatycznie animuje t tam i z powrotem. Przełącznik konstrukcji włącza lub wyłącza żółte linie de Casteljau, pola wyboru ukrywają wielokąt kontrolny lub samą krzywą, a Porównaj B-splajn nakłada zielony jednorodny sześcienny B-splajn przez te same punkty. Reset przywraca domyślny układ dla wybranego stopnia.
💡 Czy wiesz, że?
Krzywe Béziera opracowano niezależnie na początku lat 60. XX wieku przez Pierre'a Béziera w Renault i Paula de Casteljau w Citroën — obaj szukali sposobu na matematyczny opis paneli nadwozi samochodów do wspomaganego komputerowo projektowania — dekady przed tym, jak ta sama matematyka zaczęła definiować kształty liter na tej stronie.
Najczęściej zadawane pytania
Czym jest algorytm de Casteljau?
Algorytm de Casteljau oblicza wartość krzywej Béziera przy danym t poprzez wielokrotną liniową interpolację między sąsiednimi punktami kontrolnymi. Dla krzywej sześciennej (4 punkty) potrzeba trzech rund interpolacji, aby zredukować punkty do pojedynczego punktu B(t) na krzywej; kolorowe linie w symulacji pokazują każdą z tych rund w miarę jej przebiegu.
Dlaczego krzywa przechodzi przez pierwszy i ostatni punkt kontrolny, ale nie przez środkowe?
Krzywa jest ważoną średnią wszystkich punktów kontrolnych, a te wagi (wielomiany Bernsteina) spadają do zera w każdym punkcie oprócz P₀ przy t=0 i Pₙ przy t=1. Każdy inny punkt kontrolny jedynie przyciąga krzywą w swoją stronę, nigdy jej bezpośrednio nie dotykając, dlatego P₁ do Pₙ₋₁ leżą poza krzywą, a P₀ i Pₙ leżą na niej.
Co właściwie robi zmiana stopnia?
Selektor stopnia ustala, ile punktów kontrolnych definiuje krzywą: stopień 1 używa 2 punktów i rysuje linię prostą, stopień 2 używa 3 punktów dla łagodnego łuku, a stopnie 3 do 5 dodają kolejno więcej punktów i więcej możliwych zagięć. Krzywe wyższego stopnia mogą bardziej falować, ale trudniej je przewidywalnie kształtować, co jest jednym z powodów, dla których krzywe sześcienne (stopień 3) stały się standardem branżowym.
Czym krzywa Béziera różni się od pokazanego tu B-splajnu?
Pomarańczowa krzywa to prawdziwa krzywa Béziera, w której każdy punkt kontrolny wpływa na cały kształt — właściwość zwana kontrolą globalną. Zielony B-splajn pokazany przez przełącznik porównania jest zbudowany z tych samych punktów inną techniką, jednorodnym sześciennym B-splajnem, gdzie każdy punkt wpływa tylko na lokalny odcinek krzywej, więc przesunięcie jednego punktu pozostawia resztę w dużej mierze bez zmian.
Co właściwie reprezentuje parametr t?
t to parametr krzywej, przebiegający od 0 do 1. Nie jest to czas ani odległość przebyta wzdłuż krzywej; to po prostu dane wejściowe do formuły interpolacji. Przesuwanie suwaka od 0 do 1 przesuwa punkt B(t) od pierwszego punktu kontrolnego do ostatniego, choć niekoniecznie porusza się on ze stałą prędkością wzdłuż samej krzywej.