Geometrie/Frenetův trojhran

Z testwiki
Skočit na navigaci Skočit na vyhledávání

Vektor tečny

Nechť je křivka k třídy Cn v prostoru E3 dána vektorovou rovnicí s parametrem typu oblouk

f=f(s),sJ.

Potom jednotkový vektor

t(s)=f(s),sJ,

budeme nazývat vektorem tečny křivky k v bodě F(s). Tento vektor mění svou orientaci při přechodu k jinému oblouku, který mění orientaci křivky.

Vektor hlavní normály

Jednotkový vektor

n(s)=f(s)f(s),sJ,

budeme nazývat vektorem hlavní normály křivky k v bodě F(s). Vektor hlavní normály je nezávislý na volbě oblouku.

Vektor binormály

Jednotkový vektor daný vektorovým součinem vektoru tečny a vektoru hlavní normály, tedy

b(s)=t(s)×n(s),sJ,

budeme nazývat vektorem binormály křivky k v bodě F(s). 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

Uspořádanou trojici vektorů, kterou tvoří vektor tečny, vektor hlavní normály a vektor binormály, tedy

(t(s),n(s),b(s)),sJ,

budeme nazývat Frenetovým trojhranem křivky v bodě F(s).

Soubor:FrenetuvTrojhran.jpg

Algoritmus

Teč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
}