/// <summary> /// Baca exception kada je vrijednost pravca veca od 2*PI ili manja od nule /// </summary> /// <param name="izmjereniPravac">Duzina izmjerena na terenu</param> protected void exceptionOdNulaDo2PI(IRadian izmjereniPravac) { if (izmjereniPravac.ToRadians() < 0 || izmjereniPravac.ToRadians() >= 2 * Math.PI) { throw new ArgumentOutOfRangeException("izmjereniPravac ili orijentacija", izmjereniPravac, "Mjerenje mora biti izmedu 0 <= mjerenje < 2*PI"); } }
/// <summary> /// Baca exception kada je vrijednost azimuta (smjernog kuta, direkcionog ugla) veca/jednaka od 2*PI ili manja od nule /// </summary> /// <param name="izmjereniAzimut">Azimut (smjerni kut, direkcioni ugao) izmjeren na terenu</param> protected void exceptionOdNulaDo2PI(IRadian izmjereniAzimut) { if (izmjereniAzimut.ToRadians().Angle < 0 || izmjereniAzimut.ToRadians().Angle >= 2 * Math.PI) { throw new ArgumentOutOfRangeException("izmjereniAzimut", izmjereniAzimut, "Mjerenje mora biti izmedu 0 < mjerenje < 2*PI"); } }
/// <summary> /// Izracunava slobodan clan /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="vizura">Tocka vizure instrumenta</param> /// <param name="izmjereniPravac">Pravac izmjeren na terenu</param> /// <param name="orijentacija">Pravac orijentacije (nule) limba</param> /// <param name="tolerancija">Tolerancija kada je izmjereni pravac plus orijentacija blizu 2 PI, ali je manji</param> /// <returns>Radians</returns> private Radians slobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, IRadian izmjereniPravac, IRadian orijentacija, IRadian tolerancija) { if ((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura)) - izmjereniPravac.ToRadians() > 2 * Math.PI - tolerancija.ToRadians()) { return(new Radians((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura) - izmjereniPravac.ToRadians() - 2 * Math.PI))); } else { return(orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura) - izmjereniPravac.ToRadians()); } }
/// <summary> /// Izracunava slobodan clan /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="vizura">Tocka vizure instrumenta</param> /// <param name="izmjereniPravac">Pravac izmjeren na terenu</param> /// <param name="orijentacija">Pravac orijentacije (nule) limba</param> /// <returns>Rad</returns> private Radians slobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, IRadian izmjereniPravac, IRadian orijentacija) { if ((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura)) - izmjereniPravac.ToRadians() > new Radians(3 * Math.PI / 2)) { return(new Radians((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura) - izmjereniPravac.ToRadians() - 2 * Math.PI))); } else if (((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura)) - izmjereniPravac.ToRadians()).Angle < -3 * Math.PI / 2) { return(new Radians((orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura) - izmjereniPravac.ToRadians() + 2 * Math.PI))); } return(orijentacija.ToRadians() + stajaliste.SmjerniKut(vizura) - izmjereniPravac.ToRadians()); }
/// <summary> /// <para/>Racunanje slobodnog clana za matricu slobodnih clanova, preko izmjerenog azimuta i azimuta izracunatog iz koordinata /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="vizura">Tocka vizure instrumenta</param> /// <param name="izmjereniAzimut">Azimut (smjerni kut, direkcioni ugao) izmjeren na terenu</param> /// <param name="tolerancija">Vrijednost od koje slobodan clan mora biti manji (tolerancija na velike grube greske)</param> /// <exception cref="ArgumentException">Baca se kada su koordinate obe tocke iste</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada mjereni azimut nije u intervalu od 0 do 2*PI</exception> public AzimutSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, IRadian izmjereniAzimut, IRadian tolerancija) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionOdNulaDo2PI(izmjereniAzimut); f = slobodanClan(stajaliste, vizura, izmjereniAzimut); TolerancijaZadovoljena = provjeraTolerancije(f.ToRadians().Angle, tolerancija.ToRadians().Angle); }
/// <summary> /// <para/>Racunanje slobodnog clana za matricu slobodnih clanova, preko izmjerenog pravca i orijentacije i smjernog kuta (direkcionog ugla) izracunatog iz koordinata /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="vizura">Tocka vizure instrumenta</param> /// <param name="izmjereniPravac">Pravac izmjeren na terenu</param> /// <param name="orijentacija">Pravac orijentacije (nule) limba</param> /// <param name="tolerancija">Vrijednost od koje slobodan clan mora biti manji (tolerancija na velike grube greske)</param> /// <exception cref="ArgumentException">Baca se kada su koordinate obe tocke iste</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada mjereni pravac nije u intervalu od 0 do 2*PI</exception> public PravacSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, IRadian izmjereniPravac, IRadian orijentacija, IRadian tolerancija) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionOdNulaDo2PI(izmjereniPravac); exceptionOdNulaDo2PI(orijentacija); f = slobodanClan(stajaliste, vizura, izmjereniPravac, orijentacija); tolerancijaZadovoljena = provjeraTolerancije(f.Angle, tolerancija.ToRadians().Angle); }
/// <summary> /// <para/>Racunanje slobodnog clana za matricu slobodnih clanova, preko izmjerena dva pravca i smjernih kuta (direkcionih ugla) izracunatih iz koordinata /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="Od">Tocka prve vizure koja cini kut (lijevi pravac)</param> /// <param name="VizuraOd">Pravac izmjeren na terenu prema prvoj tocki</param> /// <param name="Do">Tocka druge vizure koja cini kut (desni pravac)</param> /// <param name="VizuraDo">Pravac izmjeren na terenu prema drugoj tocki</param> /// <param name="tolerancija">Vrijednost od koje slobodan clan mora biti manji (tolerancija na velike grube greske)</param> /// <exception cref="ArgumentException">Baca se kada su koordinate obe tocke iste</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada mjereni pravac nije u intervalu od 0 do 2*PI</exception> public KutSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija Od, IRadian VizuraOd, ITockaProjekcija Do, IRadian VizuraDo, IRadian tolerancija) { exceptionIsteKoordinateTocke(stajaliste, Od); exceptionIsteKoordinateTocke(stajaliste, Do); exceptionIsteKoordinateTocke(Do, Od); exceptionOdNulaDo2PI(VizuraOd); exceptionOdNulaDo2PI(VizuraDo); f = slobodanClan(stajaliste, Od, VizuraOd, Do, VizuraDo); tolerancijaZadovoljena = provjeraTolerancije(f.Angle, tolerancija.ToRadians().Angle); }
/// <summary> /// <para/>Inicijalizira novu instancu klase Geodezija.MetodaNajmanjihKvadrata.SlobodanClanKut /// <para/>Racunanje slobodnog clana za matricu slobodnih clanova, preko izmjerenog kuta i smjernih kuta (direkcionih ugla) izracunatih iz koordinata /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="Od">Tocka prve vizure koja cini kut (lijevi pravac)</param> /// <param name="Do">Tocka druge vizure koja cini kut (desni pravac)</param> /// <param name="izmjereniKut">izmjereni kut</param> /// <exception cref="ArgumentException">Baca se kada su koordinate obe tocke iste</exception> /// <exception cref="ArgumentOutOfRangeException">Baca se kada mjereni kut nije u intervalu od 0 do 2*PI</exception> public KutSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija Od, ITockaProjekcija Do, IRadian izmjereniKut) { exceptionIsteKoordinateTocke(stajaliste, Od); exceptionIsteKoordinateTocke(stajaliste, Do); exceptionIsteKoordinateTocke(Do, Od); exceptionOdNulaDo2PI(izmjereniKut); Radians koordinate = stajaliste.SmjerniKut(Do) - stajaliste.SmjerniKut(Od); if (koordinate < 0) { koordinate = koordinate + 2 * Math.PI; } f = koordinate - izmjereniKut.ToRadians(); }
/// <summary> /// Izracunava slobodan clan (prikraceno mjerenje) kuta /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="Od">Tocka prve vizure (Od) </param> /// <param name="VizuraOd">Pravac vizure prema prvoj tocki</param> /// <param name="Do">Tocka druge vizure(Do)</param> /// <param name="VizuraDo">Pravac vizure prema drugoj tocki</param> /// <returns>Radians</returns> private Radians slobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija Od, IRadian VizuraOd, ITockaProjekcija Do, IRadian VizuraDo) { Radians koordinate = stajaliste.SmjerniKut(Do) - stajaliste.SmjerniKut(Od); if (koordinate < 0) { koordinate = koordinate + 2 * Math.PI; } Radians mjerenje = VizuraDo.ToRadians() - VizuraOd.ToRadians(); if (mjerenje < 0) { mjerenje = mjerenje + 2 * Math.PI; } return(koordinate - mjerenje); }
/// <summary> /// Vraca kosekans kuta /// </summary> /// <returns>double</returns> public static double Csc(IRadian kut) { return(1 / (Math.Sin(kut.ToRadians().Angle))); }
/// <summary> /// Vraca kosekans kuta /// </summary> /// <returns>double</returns> public static double Sec(IRadian kut) { return(1 / (Math.Cos(kut.ToRadians().Angle))); }
/// <summary> /// Vraca Kotangens kuta /// </summary> /// <returns>double</returns> public static double Cot(IRadian kut) { return(1 / Math.Tan(kut.ToRadians().Angle)); }
/// <summary> /// Izracunava slobodan clan (prikraceno mjerenje) /// </summary> /// <param name="stajaliste">Tocka stajalista instrumenta</param> /// <param name="vizura">Tocka vizure instrumenta</param> /// <param name="izmjereniAzimut">Azimut (smjerni kut, direkcioni ugao) izmjeren na terenu</param> /// <returns>Rad</returns> private Radians slobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, IRadian izmjereniAzimut) { return(stajaliste.SmjerniKut(vizura) - izmjereniAzimut.ToRadians()); }