/// <summary> /// Udaljenost izmedu tocaka - Pripazite da su jedinice duzine u metrima /// </summary> /// <param name="vizura">Koordinate tocke preka kojoj se zeli odrediti udaljenost</param> /// <remarks>Racunanje se bazira na pitagorinom poucku</remarks> /// <returns>double</returns> public double Duzina(ITocka vizura) { double dy = vizura.Y - y; double dx = vizura.X - x; double d = Math.Sqrt(dy * dy + dx * dx); return(d); }
/// <summary> /// Kut u ravnini projekcije između paralele s apscisnom osi (os x) u zadanoj točki i pravca prema nekoj drugoj točki. /// Mjeri se od sjevernog dijela paralele u smjeru kretanja kazaljke na satu. /// </summary> /// <param name="vizura">Koordinate tocke prema kojoj se zeli odrediti smjerni kut</param> /// <returns>Radians</returns> public Radians SmjerniKut(ITocka vizura) { double dy = vizura.Y - y; double dx = vizura.X - x; // Prva 4. slucaja odgovaraju za vise 99% racunanja if (dy >= 0 && dx > 0) { return(new Radians(Math.Atan(dy / dx))); // 1. kvadrant } else if (dy > 0 && dx < 0) { return(new Radians(Math.Atan(dy / dx) + Math.PI)); // 2. kvadrant } else if (dy <= 0 && dx < 0) { return(new Radians(Math.Atan(dy / dx) + Math.PI)); // 3. kvadrant } else if (dy < 0 && dx > 0) { return(new Radians(Math.Atan(dy / dx) + 2 * Math.PI)); // 4. kvadrant } // Posebni slucajevi po y-osi, javlja se problem dijeljenja sa nulom else if (dy > 0 && dx == 0) { return(new Radians(Math.PI / 2)); } else if (dy < 0 && dx == 0) { return(new Radians(3 * Math.PI / 2)); } // Obe tocke imaju iste koordinate else { throw new ArgumentException("Nije moguce izracunati smjerni kut izmedu dvije tocke s istim koordinatama"); } }