Geometrie/Bézierova křivka
Bézierova křivka, nesprávným pravopisem Beziérova křivka, je další metodou vytváření křivek. Tato metoda umožňuje interaktivní vytváření a modifikaci křivek. Pomocí této metody můžete rovněž datově reprezentovat i interpolační křivky (existují například algoritmy na převod mezi interpolačními spline kubikami a B-spline kubikami resp. Bézier kubikami).
Vyjádření
editovatBézierova křivka stupně n je určena rovnicí:
kde:
,
jsou polohové vektory vrcholů řídícího polynomu (tzv. Bézierovy body)
jsou tzv. Bernsteinovy polynomy n-tého stupně,
pro které platí:
Vlastnosti
editovatNezáporná hodnota
editovatpro všechny hodnoty a pro všechna . Tato vlastnost plyne z toho, že pro jsou všechny součinitele v definici Bézierových polynomů nezáporné.
Jednotkový součet
editovatpro všechny hodnoty
Plyne přímo z binomické věty. Platí totiž:
Koncové podmínky
editovat
Maximum
editovatnabývá právě jednoho maxima na , a to pro
Symetrie
editovatPro libovolné n je množina polynomů symetrická podle
Rekurentní vztah
editovat
a:
Rekurentní vztah vyplývá ze vztahu pro kombinační čísla:
Derivace
editovat
Algoritmizace
editovatFactorial(int a)
editovatPomocná metoda pro výpočet faktoriálu pro kombinační číslo.
int Factorial(int a)
{
if (a==0) return 1;
else
return (a* Factorial(a-1));
}
Combin(int a, int b)
editovatPomocná metoda pro výpočet kombinačního čísla pro výpočet bodů Bernsteinova polynomu.
public int Combin(int a, int b)
{
return Factorial(a)/(Factorial(a-b)*Factorial(b));
}
BernsteinPolynom(int k,int i,double t)
editovatMetoda pro výpočet bodů polynomu.
public double BernsteinPolynom(int k,int i,double t)
{
return Combin(k,i)*Math.Pow(t,i)*Math.Pow(1-t,k-i);
}
Vector GetPoint(double t)
editovatPřetěžovaná metoda třídy Curve. V zadaném parametru vrátí polohový vektor bodu na křivce.
public override Vector GetPoint(double t)
{
Vector ret = new Vector();
Vector v;
for (int i = 0;i<ctrlPoly.Count;i++)
{
v = ((RichPoint)ctrlPoly[i]).Locate;
ret = ret + BernsteinPolynom(ctrlPoly.Count-1,i,nt)*v;
}
return ret;
}
RichPoint CreateRichPoint()
editovatPřetěžovaná metoda třídy Curve. Vytvoření řídícího bodu pro křivku. Oproti rodiči má navíc rozšíření o váhový koeficient.
public override RichPoint CreateRichPoint()
{
double w = ((RichPoint) ctrlPoly[0]).T;
for (int q=0; q<ctrlPoly.Count;q++)
{
if (((RichPoint) ctrlPoly[q]).T>w) w=((RichPoint) ctrlPoly[q]).T;
}
RichPoint tw = new RichPoint(new Vector(), w+0.1);
return tw;
}
Externí odkazy
editovat- Encyklopedický článek Bézierova křivka ve Wikipedii
- Obecné Bézierovy křivky CZ
- Living Math Bézier applet EN
Autoři
editovatTento text vypracovali studenti Univerzity Palackého v Olomouci katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.