Geometrie/Racionální B–spline křivka
Racionální B-spline křivky
Racionální B-spline křivka stupně je určena rovnicí:
- ,
kde
- jsou body řídícího polygonu (tzv. de Boor body),
- jsou váhové parametry jednotlivých bodů ,
- jsou normalizované B-spline bázové funkce stupně .
Rovnici racionální B-spline křivky můžeme upravit na tvar:
- ,
kde
- jsou racionální B-spline bázové funkce definované:
Racionální B-spline křivky jsou obvykle definovány na neuniformním uzlovém vektoru . Takovým křivkám pak říkáme NURBS křivky (non uniform rational B-spline). Je-li tento vektor neperiodický, pak pro něj platí stejná pravidla jako pro neracionální B-spline křivky.
Analytické vlastnosti racionálních bázových funkcí
Pro racionální bázové funkce platí podobné analytické vlastnosti jak pro bázové funkce .
Nezáporná hodnota
- pro
Jednotkový součet
- pro
Vlastnost krajních funkcí
Extrémy
Každá bázová funkce má pro každé na intervalu právě jedno maximum.
Lokální vlastnost
- pro
Zobecnění
Funkce jsou zobecněním funkcí , pro a platí
Pro uzlové vektory a váhy platí:
- pro obrázek vlevo
- pro obrázek vpravo
Geometrické vlastnosti racionálních B-spline křivek
Geometrické vlastnosti pro racionální B-spline křivky jsou zobecněním vlastností neracionálních B-spline křivek.
Koncové podmínky
Pokud uvažujeme neperiodický uzlový vektor ve tvaru
- ,
pak platí, že racionální B-spline křivka stupně prochází počátečním a koncovým bodem řídícího polygonu a dotýká se v těchto bodech jeho první a poslední hrany.
Mezi počtem uzlů , stupněm křivky a počtem bodů řídícího polygonu křivky platí následující vztah:
Konvexní obal
Jsou-li všechny váhové parametry nezáporné, pak pro leží bod v konvexním obalu množiny, která je určena body .
Invariance vůči transformacím
Racionální B-spline křivky jsou invariantní vůči afinním transformacím, NURBS křivky jsou také invariantní vůči projektivnímu promítání.
Průsečík přímky (ve 2D) nebo roviny (ve 3D) s křivkou
Žádná přímka (rovina) nemá více průsečíků s křivkou než s jejím řídícím polygonem.
De Boor algoritmus
Viz [[../Racionální algoritmus de Boor|Racionální algoritmus de Boor]]
Modifikace tvaru křivky pomocí váhových parametrů
Obdobně jako u racionálních Bézierových křivek můžeme využít změny hodnot váhových parametrů modifikaci křivky bez potřeby měnit polohu bodů řídícího polygonu. Zvětšujeme-li hodnotu váhového parametru a ostatní váhové parametry zůstanou beze změny, křivka se více "přimyká" k odpovídajícímu bodu , ovšem vliv změny na tvar křivky je omezen pouze pro , ostatní části zůstanou beze změny.
Vyjádření kružnice pomocí racionální B-spline křivky
Jak bylo řečeno v úvodu, některé kuželosečky, jako jsou elipsa nebo hyperbola, je možné pomocí neracionálních křivek popsat pouze přibližně, proto byly zavedeny křivky racionální. V tomto příkladě ukážeme, jak popsat kružnici pomocí racionální B-spline křivky.
Vektorová rovnice pro kružnici, která je určena sedmi vrcholy řídícího polygonu, je následující:
- ,
kde
- uzlový vektor je
- a váhový vektor je .
Vektorová rovnice pro kružnici, která je určena devíti vrcholy řídícího polygonu, je:
- ,
kde
- uzlový vektor je
- a váhový vektor je .
Algoritmizace
ComputeKnotVector(int n, int k)
Spočítá uzlový vektor.
Parametry:
- n - počet kontrolních bodů mínus 1
- k - stupeň de Boor bázové funkce
BasisFunction(int k, int i, ParameterCollection u, double t)
Spočítá a vrátí hodnotu normalizované bázové funkce stupňe k.
Parametry:
- k - stupeň de Boor bázové funkce
- i - index polohového vektoru vrcholu řídícího polygonu
- u - uzlový vektor
- t - parametr
Vector GetPoint(double t)
Přetížená metoda třídy Curve. Spočítá a vrátí bod na křivce.
Parametry:
- t - parametr výpočtu
RichPoint CreateRichPoint()
Přetížená metoda třídy Curve. Spočítá a vrátí řídící bod pro křivku s váhovým koeficientem. RacionalRichPoint je jako RichPoint, ale počítá s váhou bodu.