Geometrie/Frenetův trojhran
Vektor tečny
editovatNechť je křivka třídy v prostoru dána vektorovou rovnicí s parametrem typu oblouk
.
Potom jednotkový vektor
,
budeme nazývat vektorem tečny křivky v bodě . Tento vektor mění svou orientaci při přechodu k jinému oblouku, který mění orientaci křivky.
Vektor hlavní normály
editovatJednotkový vektor
,
budeme nazývat vektorem hlavní normály křivky v bodě . Vektor hlavní normály je nezávislý na volbě oblouku.
Vektor binormály
editovatJednotkový vektor daný vektorovým součinem vektoru tečny a vektoru hlavní normály, tedy
,
budeme nazývat vektorem binormály křivky v bodě . Tento vektor je kolmý na vektor tečny a vektor hlavní normály. Je patrné, že vektor binormály bude měnit svou orientaci při přechodu k oblouku, který mění orientaci křivky.
Frenetův trojhran
editovatUspořádanou trojici vektorů, kterou tvoří vektor tečny, vektor hlavní normály a vektor binormály, tedy
,
budeme nazývat Frenetovým trojhranem křivky v bodě .
Algoritmus
editovatTečný vektor je roven první derivaci křivky v bodě
public static Vector3d Tecna(Curve krivka, double u) { return krivka.FirstDeriv(u).UnitVector(); //UnitVector - převede vektor na jednotkový }
Vektor hlavní normály je kolmý na tečný vektor a leží v oskulační rovině
public static Vector3d HlavniNormala(Curve krivka, double u) { return krivka.SecondDeriv(u).Ortogonal(krivka.FirstDeriv(u)).UnitVector(); //a.Ortogonal(b) - ortogonalizuje vektor a podle vektoru b }
Vektor binormály je roven vektorovému součinu tečného vektoru a vektoru hlavní normály
public static Vector3d Binormala (Curve krivka, double u) { Vector3d t=Tecna(krivka,u); Vector3d n=HlavniNormala(krivka,u); return t.CrossProduct(n); //vektorový součin }