Problem 5: Potrebno je pronaći najkraću udaljenost između tačke i prave.
Iz analitičke geometrije znamo da je najkraća udaljenost između prave i tačke ona udaljenost koja se poklapa sa pravom koja prolazi tačkom A i normalna je na pravu p. U tom smislu pretpostavimo da normala povučena iz tačke A siječe pravu p u tački A’ . Posmatrajmo vektore i
.
Izračunavanjem vektorskog proizvoda ova dva vektora dobićemo površinu paralelograma razapetog na tim vektorima. Kako znamo da je površina paralelograma u našem slučaju: P=AA’ x P1P2, to lahko možemo izračunati dužinu stranice AA’. U stvari ona predstavlja visinu paralelograma.
Sada možemo pisati:
. Ovim smo izračunali najkraću udaljenost između tačke i prave. Implementacija u C# programskom jeziku moze izgledati na sljedeći način:
static float shortestDistance(Point A, Point P1, Point P2) { //referentni vektor ili pravac kroz referentne tačke na pravoj Point vektor = new Point(); vektor.x = P2.x - P1.x; vektor.y = P2.y - P1.y; //Pravimo vektor od referentne tacke 1 i date tacke a Point vektor2 = new Point(); vektor2.x = P1.x - A.x; vektor2.y = P1.y - A.y; //Izračunavamo vektorski proizvod dva verktora float vecProd = vektor.y * vektor2.x - vektor.x * vektor2.y; //Izračunavamo modul vektora P1P2 float mod1=(float)Math.Sqrt(vektor.x * vektor.x + vektor.y * vektor.y); //udaljenost d== vektorski proizvod/dizina vektora P1P2 float dist = vecProd / mod1; return dist; }