Geometrie/První křivost

Z Wikiknih

Přejít na: navigace, hledání

Obsah

[editovat] Popis

První křivost přiřazuje každému bodu F(p) křivky k jeho vychýlení do roviny. Tudíž je pomocí ní možné určovat inflexní body nebo jestli je křivka přímka (část přímky).

[editovat] Vyjádření

Nechť je k křivka dána vektorovou rovnicí  f = f(p) , p\in J a p je parametr typu oblouk. Vektor první křivosti křivky k v bodě F(p) je vektor f^{\prime\prime}(p). První křivost je pro parametr typu oblouk funkce g(p) = |f^{\prime\prime}(p)|, která přiřazuje každému bodu F(p) křivky k jeho první křivost. První křivost i její vektor jsou nezávislé na zvoleném oblouku křivky.

[editovat] Algoritmizace

Funkce pro výpočet první křivosti:

firstCurvature 
proměnná reprezentující první křivost.
public void SetFirstCurvature()
{
  c2DPoint D1Point = Fxydxy(parametr);		// point of the 1st derivation
  c2DPoint D2Point = Fxyddxy(parametr);		// point of the 2nd der.
  
  firstCurvature = Math.Sqrt(Math.Pow(Math.Abs(D1Point.X*D2Point.Y -
    D1Point.Y*D2Point.X), 2) /
    Math.Pow(Math.Abs(SkalarProductTwoVectors(D1Point,D1Point)), 3));
}

Funkce pro výpočet vektoru první křivosti:

firstTorsion 
úsečka reprezentující vektor první křivosti.
private void SetVectorOfFirstCurvature()
{
  Point P = Fxy(parametr);					// actual point
  
  Point D2P = this.normal.PointByDistance(firstCurvature);
  // point at a distance of firstCurvature at the direction of the normal from the actual point
  
  Point OsCirCent = new Point(oscullatingCircle[0],oscullatingCircle[1]);		// center of the osculating circle
  
  Point D2P2 = new Point(P.X - (D2P.X - P.X),P.Y - (D2P.Y - P.Y));
  // point opposite to a point D2P around the tangent		
  
  double DistRtoP2 = Math.Sqrt(Math.Pow(OsCirCent.X - D2P2.X,2)+Math.Pow(OsCirCent.Y - D2P2.Y,2));	
  // distance from point D2P2 to center of oscullating circle
  
  double DistRtoP = Math.Sqrt(Math.Pow(OsCirCent.X - D2P.X,2)+Math.Pow(OsCirCent.Y - D2P.Y,2));	
  // distance from point D2P to center of oscullating circle
  
  //2nd point of the vector of firstTorsion is set to a point which is closer to the center of the osculating circle
  if(DistRtoP2 > DistRtoP)	
  {
      firstTorsion.A = P;
      firstTorsion.B = D2P;				
  }
  else
  {
      firstTorsion.A = P;
      firstTorsion.B = D2P2;
  }
}

[editovat] Podívejte se také na

[editovat] Autoři

Tento text vypracovali studenti Univerzity Palackého v Olomouci katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.