/// <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> /// <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, Radians izmjereniAzimut) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionOdNulaDo2PI(izmjereniAzimut); f = slobodanClan(stajaliste, vizura, izmjereniAzimut); }
/// <summary> /// Provjerada li tocke imaju iste koordinate - ako imaju baca se exception /// </summary> /// <param name="stajaliste">Pocetna tocka mjerenja duzine</param> /// <param name="vizura">Zavrsna tocka mjerenja duzine</param> protected void exceptionIsteKoordinateTocke(ITockaProjekcija stajaliste, ITockaProjekcija vizura) { if ((stajaliste.X == vizura.X) && (stajaliste.Y == vizura.Y)) { throw new ArgumentException("Koordinate dvije tocke su iste"); } }
/// <summary> /// <para/>Racunanje slobodnog clana za matricu slobodnih clanova, preko izmjerene duzine i duzine iz koordinata /// </summary> /// <param name="stajaliste">Pocetna tocka mjerenja duzine</param> /// <param name="vizura">Zavrsna tocka mjerenja duzine</param> /// <param name="izmjerenaDuzina">Izmjerena duzina u metrima</param> /// <exception cref="ArgumentException">Baca se kada su koordinate obe tocke iste ili je duzina manja ili jednaka nuli</exception> public DuzinaSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, double izmjerenaDuzina) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionIzmjerenaDuzinaManjaOdNule(izmjerenaDuzina); f = slobodanClan(stajaliste, vizura, izmjerenaDuzina); }
/// <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> /// <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) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionOdNulaDo2PI(izmjereniPravac); exceptionOdNulaDo2PI(orijentacija); f = slobodanClan(stajaliste, vizura, izmjereniPravac, orijentacija); }
/// <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 izmjerene duzine i duzine iz koordinata /// </summary> /// <param name="stajaliste">Pocetna tocka mjerenja duzine</param> /// <param name="vizura">Zavrsna tocka mjerenja duzine</param> /// <param name="izmjerenaDuzina">Izmjerena duzina u metrima</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 ili je duzina manja ili jednaka nuli</exception> public DuzinaSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, double izmjerenaDuzina, double tolerancija) { exceptionIsteKoordinateTocke(stajaliste, vizura); exceptionIzmjerenaDuzinaManjaOdNule(izmjerenaDuzina); f = slobodanClan(stajaliste, vizura, izmjerenaDuzina); tolerancijaZadovoljena = provjeraTolerancije(f, tolerancija); }
/// <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> /// <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) { exceptionIsteKoordinateTocke(stajaliste, Od); exceptionIsteKoordinateTocke(stajaliste, Do); exceptionIsteKoordinateTocke(Do, Od); exceptionOdNulaDo2PI(VizuraOd); exceptionOdNulaDo2PI(VizuraDo); f = slobodanClan(stajaliste, Od, VizuraOd, Do, VizuraDo); }
/// <summary> /// <para/>Razvoj u Taylorov red funkcije duzine uz odbacivanje clanova viseg reda (Linearizacija) /// </summary> /// <param name="stajaliste">Priblizne koordinate tocke stajalista prilikom mjerenja</param> /// <param name="vizura">Priblizne koordinate tocke vizure</param> public Duzina(ITockaProjekcija stajaliste, ITockaProjekcija vizura) { Radians smjerniKut = stajaliste.SmjerniKut(vizura); yStajaliste = -Matematika.Sin(smjerniKut); xStajaliste = -Matematika.Cos(smjerniKut); yVizura = -yStajaliste; xVizura = -xStajaliste; }
/// <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> /// <para/>Razvoj u Taylorov red funkcije pravca uz odbacivanje clanova viseg reda (Linearizacija) /// <para/>Vrijednost razvoja u red data je u radijanima /// </summary> /// <param name="stajaliste">Priblizne koordinate tocke stajalista prilikom mjerenja (Od)</param> /// <param name="vizura">Priblizne koordinate tocke vizure (Do)</param> public Azimut(ITockaProjekcija stajaliste, ITockaProjekcija vizura) { Radians smjerniKut = stajaliste.SmjerniKut(vizura); double duzina = stajaliste.Duzina(vizura); yStajaliste = new Radians(-Matematika.Cos(smjerniKut) / duzina); xStajaliste = new Radians(Matematika.Sin(smjerniKut) / duzina); yVizura = -yStajaliste; xVizura = -xStajaliste; }
/// <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> /// 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/>Razvoj u Taylorov red funkcije pravca uz odbacivanje clanova viseg reda (Linearizacija) /// <para/>Vrijednost razvoja u red data je u radijanima /// </summary> /// <param name="stajaliste">Priblizne koordinate tocke stajalista prilikom mjerenja (Od)</param> /// <param name="vizura">Priblizne koordinate tocke vizure (Do)</param> public Pravac(ITockaProjekcija stajaliste, ITockaProjekcija vizura) : base(stajaliste, vizura) { Radians smjerniKut = stajaliste.SmjerniKut(vizura); double duzina = stajaliste.Duzina(vizura); yStajaliste = new Radians(-Matematika.Cos(smjerniKut) / duzina); xStajaliste = new Radians(Matematika.Sin(smjerniKut) / duzina); yVizura = -yStajaliste; xVizura = -xStajaliste; zNepoznanicaOrijentacije = 1; }
/// <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> /// <para/>Razvoj u Taylorov red funkcije kuta uz odbacivanje clanova viseg reda (Linearizacija) /// <para/>Vrijednost razvoja u red data je u radijanima /// </summary> /// <param name="stajaliste">Priblizne koordinate tocke stajalista prilikom mjerenja</param> /// <param name="Od">Priblizne koordinate prve tocke vizure Od koje se mjeri kut</param> /// <param name="Do">Priblizne koordinate druge tocke vizure Do koje se mjeri kut</param> public Kut(ITockaProjekcija stajaliste, ITockaProjekcija Od, ITockaProjekcija Do) { Radians smjerniKutOd = stajaliste.SmjerniKut(Od); double duzinaOd = stajaliste.Duzina(Od); Radians smjerniKutDo = stajaliste.SmjerniKut(Do); double duzinaDo = stajaliste.Duzina(Do); yOd = new Radians(-Matematika.Cos(smjerniKutOd) / duzinaOd); xOd = new Radians(Matematika.Sin(smjerniKutOd) / duzinaOd); yDo = new Radians(Matematika.Cos(smjerniKutDo) / duzinaDo); xDo = new Radians(-Matematika.Sin(smjerniKutDo) / duzinaDo); yStajaliste = (-yDo) - yOd; xStajaliste = (-xDo) - xOd; }
/// <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> /// <para/>Racunanje slobodnog clana (2D) za matricu slobodnih clanova, preko koordinata dvije tocke i izmjerenih baznih vektora /// </summary> /// <param name="stajaliste">Tocka ishodista vektora</param> /// <param name="vizura">Tocka zavrsekta vektora</param> /// <param name="dx">Komponenta izmjerenog vektor po x-osi</param> /// <param name="dy">Komponenta izmjerenog vektor po y-osi</param> public BazniVektorSlobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, double dx, double dy) { Fx = vizura.X - stajaliste.X - dx; Fy = vizura.Y - stajaliste.Y - dy; }
/// <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()); }
/// <summary> /// Izracunava slobodan clan (prikraceno mjerenje) /// </summary> /// <param name="stajaliste"></param> /// <param name="vizura"></param> /// <param name="izmjerenaDuzina">Duzina izmjerena na terenu</param> /// <returns>double</returns> private double slobodanClan(ITockaProjekcija stajaliste, ITockaProjekcija vizura, double izmjerenaDuzina) { return(stajaliste.Duzina(vizura) - izmjerenaDuzina); }