Geometrie/První křivost

Popis editovat

První křivost přiřazuje každému bodu   křivky   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).

Vyjádření editovat

Nechť je k křivka dána vektorovou rovnicí   a   je parametr typu oblouk. Vektor první křivosti křivky   v bodě   je vektor  . První křivost je pro parametr typu oblouk funkce  , která přiřazuje každému bodu   křivky   jeho první křivost. První křivost i její vektor jsou nezávislé na zvoleném oblouku křivky.

Algoritmizace editovat

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;
	}
}

Podívejte se také na editovat

Autoři editovat

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.