Geometrie/Racionální algoritmus de Boor

Z testwiki
Verze z 31. 3. 2023, 12:14, kterou vytvořil imported>JAnDbot (robot: kosmetické úpravy)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

De Boor algoritmus

Bod na [[../Racionální B–spline křivka|racionální B-spline křivce]] můžeme stejně jako u racionálních Bézierových křivek spočítat hned dvěma způsoby.

1. Pomocí algoritmu de Boor pro racionální křivky:

Zvolíme-li uui,ui+1, pak bod na racionální B-spline křivce vypočteme opakovanou lineární interpolací:

Pij(u)=(1αij)ωi1j1ωijPi1j1+αijωij1ωijPij1,

kde

ωij(u)=(1αij)ωi1j1+αijωij1

a

αij=uuiui+kj+1, i=1k,,1 a Pi0=Pi.

Bod P1k(u)=P(u) je hledaný bod racionální B-spline křivky.

Toto rozšíření algoritmu de Boor vzniklo obdobným způsobem jako rozšíření algoritmu de Casteljau pro Bézierovy křivky.

2. Převodem na neracionální křivku a zpětným promítnutím:

Převedeme racionální B-spline na neracionální (o jednu dimenzi výše), provedeme de Boor algoritmus pro neracionální křivku a výsledný bod převedeme (promítneme) zpět.


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

Šablona:Kód

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

Šablona:Kód