Geometrie/Frenetův trojhran

Vektor tečny

editovat

Nechť 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

editovat

Jednotkový 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

editovat

Jednotkový 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

editovat

Uspořá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

editovat

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
}