Přeskočit na obsah

Geometrie/První křivost

Z Wikiknih

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 | editovat zdroj]

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 | editovat zdroj]

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 | editovat zdroj]

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.