コード例 #1
0
        private void TworzWektory()
        {
            this.tachimetrTableAdapter.Fill(this.database1DataSet.Tachimetr);
            this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
            var oblazymut   = new Wspprzyb();
            var obliczenia2 = new Transformacja();

            foreach (DataRow row in database1DataSet.Tachimetr.Rows)
            {
                string stanowisko = (row["Stanowisko"].ToString());
                string cel        = (row["Cel"].ToString());
                var    odl        = Convert.ToDouble(row[5]);
                var    hi         = Convert.ToDouble(row[6]);
                var    hc         = Convert.ToDouble(row[7]);
                var    alfa       = Convert.ToDouble(row[3]);
                var    beta       = Convert.ToDouble(row[4]);

                DataRow celRow = database1DataSet.Transformacja.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                DataRow stRow  = database1DataSet.Transformacja.AsEnumerable().Where(rowst => rowst.Nazwa.Equals(stanowisko)).FirstOrDefault();

                double B  = Convert.ToDouble(stRow["B"]);
                double L  = Convert.ToDouble(stRow["L"]);
                double Bc = Convert.ToDouble(celRow["B"]);
                double Lc = Convert.ToDouble(celRow["L"]);
                var    b  = Properties.Settings.Default.elipsoida_b;
                var    a  = Properties.Settings.Default.elipsoida_a;
                var    f  = Properties.Settings.Default.elipsoida_f;
                double azymut; obliczenia2.Vincenty(B, L, Bc, Lc, a, b, f, out azymut);
                var    Brad  = B * Math.PI / 180;
                var    Lrad  = L * Math.PI / 180;
                double sigma = 0;

                var przyrosty = oblazymut.Oblbiegunowe(0, 0, 0, odl, azymut, 0, 0
                                                       , beta, hi, hc);
                var eta       = (double)stRow["eta"];
                var ksi       = (double)stRow["ksi"];
                var ksirad    = ksi * Math.PI / (180 * 60 * 60);
                var etarad    = eta * Math.PI / (180 * 60 * 60);
                var betaRad   = beta * M.PI / 200;
                var azymutRad = azymut * M.PI / 200;
                var ms        = Properties.Settings.Default.bladdlugosci1 / 1000000 +
                                Properties.Settings.Default.bladdlugosci2 / 1000000 * odl;
                double malfa = Properties.Settings.Default.bladkierunkucc / 10000 * M.PI / 200, mbeta = malfa, mi = Properties.Settings.Default.bladwysantm / 1000000, mj = mi;
                var    mx2 = M.Pow(M.Cos(azymutRad) * M.Sin(azymutRad), 2) * M.Pow(ms, 2) +
                             M.Pow((-M.Sin(azymutRad) * M.Sin(betaRad) * odl), 2) * M.Pow(malfa, 2) +
                             M.Pow(odl * M.Cos(azymutRad) * M.Cos(betaRad), 2) * M.Pow(mbeta, 2);
                var my2 = M.Pow(M.Sin(azymutRad) * M.Sin(azymutRad), 2) * M.Pow(ms, 2) +
                          M.Pow((M.Cos(azymutRad) * M.Sin(betaRad) * odl), 2) * M.Pow(malfa, 2) +
                          M.Pow(odl * M.Sin(azymutRad) * M.Cos(betaRad), 2) * M.Pow(mbeta, 2);
                var mz2 = M.Pow(M.Cos(betaRad), 2) * M.Pow(ms, 2) + M.Pow(odl * -M.Sin(betaRad), 2) * M.Pow(mbeta, 2) + M.Pow(mi, 2) +
                          M.Pow(mj, 2);
                Matrix <double> bledy = DenseMatrix.OfArray(new double[, ]
                {
                    { mx2, 0, 0 },
                    { 0, my2, 0 },
                    { 0, 0, mz2 }
                });


                Matrix <double> xyz = DenseMatrix.OfArray(new double[, ] {
                    { przyrosty.X },
                    { przyrosty.Y },
                    { przyrosty.H }
                });
                Matrix <double> R3 = DenseMatrix.OfArray(new double[, ] {
                    { Math.Cos(sigma), Math.Sin(sigma), 0 },
                    { -Math.Sin(sigma), Math.Cos(sigma), 0 },
                    { 0, 0, 1 }
                });

                Matrix <double> R2 = DenseMatrix.OfArray(new double[, ] {
                    { 1, -etarad * Math.Tan(Brad), -ksirad },
                    { etarad *Math.Tan(Brad), 1, -etarad },
                    { ksirad, etarad, 1 }
                });

                Matrix <double> R13 = DenseMatrix.OfArray(new double[, ]
                {
                    { -Math.Sin(Brad) * Math.Cos(Lrad), -Math.Sin(Brad) * Math.Sin(Lrad), Math.Cos(Brad) },
                    { -Math.Sin(Lrad), Math.Cos(Lrad), 0 },
                    { Math.Cos(Brad) * Math.Cos(Lrad), Math.Cos(Brad) * Math.Sin(Lrad), Math.Sin(Brad) }
                });


                var wynik      = R13.Transpose() * R2.Transpose() * R3.Transpose() * xyz;
                var dlugosc    = Math.Sqrt((Math.Pow(wynik[0, 0], 2) + Math.Pow(wynik[1, 0], 2) + Math.Pow(wynik[2, 0], 2)));
                var obrot1     = R3 * R2 * R13;
                var obrot2     = R13.Transpose() * R2.Transpose() * R3.Transpose();
                var wynikbledy = obrot1 * bledy * obrot2;
                var mx         = M.Sqrt(wynikbledy[0, 0]);
                var my         = M.Sqrt(wynikbledy[1, 1]);
                var mz         = M.Sqrt(wynikbledy[2, 2]);
                wektory2TableAdapter.Insert(stanowisko, cel, wynik[0, 0], wynik[1, 0], wynik[2, 0], "Klasyczne-obl.wekt.", przyrosty.X, przyrosty.Y, przyrosty.H, mx, my, mz, dlugosc);
            }
            foreach (DataRow row in database1DataSet.Wektory.Rows)
            {
                var dlugosc = Math.Sqrt((Math.Pow(Convert.ToDouble(row["DX"]), 2) + Math.Pow(Convert.ToDouble(row["DY"]), 2) + Math.Pow(Convert.ToDouble(row["DZ"]), 2)));
                wektory2TableAdapter.Insert(row["poczatek"].ToString(), row["koniec"].ToString(), Convert.ToDouble(row["DX"]), Convert.ToDouble(row["DY"]), Convert.ToDouble(row["DZ"]), "RTKLib", null, null, null, Convert.ToDouble(row["sdx"]), Convert.ToDouble(row["sdy"]), Convert.ToDouble(row["sdz"]), dlugosc);
            }

            this.wektory2TableAdapter.Fill(this.database1DataSet.Wektory2);
        }
コード例 #2
0
        void odczyt()
        {
            this.tachimetrTableAdapter.Fill(this.database1DataSet.Tachimetr);
            this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
            var rtBotworz = new FormOtworzRTB();

            rtBotworz.MdiParent = this.MdiParent;
            rtBotworz.Show();
            var    oblazymut            = new Wspprzyb();
            double azymut               = 0;
            double odczyt_nawiazania    = 0;
            bool   nawiazanie           = false;
            string stanowsikopoprzednie = "";
            bool   czyjuz               = false;
            bool   braknawiazania       = true;
            var    obliczenia           = new Transformacja();
            var    b = Properties.Settings.Default.elipsoida_b;
            var    a = Properties.Settings.Default.elipsoida_a;
            var    f = Properties.Settings.Default.elipsoida_f;
            var    modultransformacji = new Transformacja();
            int    licznik            = 0;

            toolStripProgressBar1.Maximum = database1DataSet.Tachimetr.Rows.Count;
            while (czyjuz != true)
            {
                toolStripProgressBar1.Value = 0;
                czyjuz = true;
                foreach (DataRow row in database1DataSet.Tachimetr.Rows)
                {
                    var stanowisko = row.ItemArray[1].ToString();
                    if (stanowisko != stanowsikopoprzednie)
                    {
                        nawiazanie = false;
                    }
                    var    cel = row.ItemArray[2].ToString();
                    string wynikc, wyniks;
                    bool   celistnieje =
                        database1DataSet.Transformacja.Any(punkt => punkt.Nazwa.Equals(cel));
                    if (celistnieje)
                    {
                        wynikc = "Znany ";
                    }
                    else
                    {
                        wynikc = "Nieznany";
                        czyjuz = false;
                    }
                    bool stanowiskoistnieje =
                        database1DataSet.Transformacja.Any(
                            punkt => punkt.Nazwa.Equals(stanowisko));
                    if (stanowiskoistnieje)
                    {
                        wyniks = "Znany ";
                    }
                    else
                    {
                        wyniks = "Nieznany";
                        czyjuz = false;
                    }
                    string dowyswietlenia = string.Format("stanowisko: {0}  {3}  cel: {1} {2}\n", stanowisko, cel,
                                                          wynikc, wyniks);

                    if (celistnieje && stanowiskoistnieje)
                    {
                        bool    stanowisko3 = database1DataSet.Transformacja.Any(punkt => punkt.Nazwa.Equals(stanowisko));
                        DataRow celRow      =
                            database1DataSet.Transformacja.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                        DataRow stRow =
                            database1DataSet.Transformacja.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        //tu coś zmienic
                        double sB = Convert.ToDouble(stRow["B"]);
                        double sL = Convert.ToDouble(stRow["L"]);
                        double cB = Convert.ToDouble(celRow["B"]);
                        double cL = Convert.ToDouble(celRow["L"]);
                        obliczenia.Vincenty(sB, sL, cB, cL, a, b, f, out azymut);
                        dowyswietlenia    = dowyswietlenia + "azymut: " + azymut + "\n";
                        nawiazanie        = true;
                        odczyt_nawiazania = Convert.ToDouble(row.ItemArray[3]);
                        braknawiazania    = false;
                    }
                    if (celistnieje == false && stanowiskoistnieje && nawiazanie)
                    {
                        DataRow stRow =
                            database1DataSet.Transformacja.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        double sx   = Convert.ToDouble(stRow["X"]);
                        double sy   = Convert.ToDouble(stRow["Y"]);
                        double sz   = Convert.ToDouble(stRow["Z"]);
                        var    odl  = Convert.ToDouble(row[5]);
                        var    hi   = Convert.ToDouble(row[6]);
                        var    hc   = Convert.ToDouble(row[7]);
                        var    alfa = Convert.ToDouble(row[3]);
                        var    beta = Convert.ToDouble(row[4]);

                        var przyrosty = oblazymut.Oblbiegunowe(0, 0, 0, odl, alfa, 0, 0
                                                               , beta, hi, hc);
                        var eta = (double)stRow["eta"];
                        var ksi = (double)stRow["ksi"];

                        /*var temp=ksi;
                         * ksi = eta;
                         * eta = temp;*/
                        var ksirad = ksi * Math.PI / (180 * 60 * 60);
                        var etarad = eta * Math.PI / (180 * 60 * 60);



                        double          B    = Convert.ToDouble(stRow["B"]);
                        double          L    = Convert.ToDouble(stRow["L"]);
                        var             Brad = B * Math.PI / 180;
                        var             Lrad = L * Math.PI / 180;
                        Matrix <double> xyz  = DenseMatrix.OfArray(new double[, ] {
                            { przyrosty.X },
                            { przyrosty.Y },
                            { przyrosty.H }
                        });
                        dowyswietlenia += " Odnaleziono punkt " + cel + "\n";
                        var sigma = azymut - odczyt_nawiazania;
                        sigma = sigma * Math.PI / 200;
                        var sigma2 = sigma;
                        //sigma = 0;



                        Matrix <double> R3 = DenseMatrix.OfArray(new double[, ] {
                            { Math.Cos(sigma), Math.Sin(sigma), 0 },
                            { -Math.Sin(sigma), Math.Cos(sigma), 0 },
                            { 0, 0, 1 }
                        });

                        Matrix <double> R2 = DenseMatrix.OfArray(new double[, ] {
                            { 1, -etarad * Math.Tan(Brad), -ksirad },
                            { etarad *Math.Tan(Brad), 1, -etarad },
                            { ksirad, etarad, 1 }
                        });

                        Matrix <double> R13 = DenseMatrix.OfArray(new double[, ]
                        {
                            { -Math.Sin(Brad) * Math.Cos(Lrad), -Math.Sin(Brad) * Math.Sin(Lrad), Math.Cos(Brad) },
                            { -Math.Sin(Lrad), Math.Cos(Lrad), 0 },
                            { Math.Cos(Brad) * Math.Cos(Lrad), Math.Cos(Brad) * Math.Sin(Lrad), Math.Sin(Brad) }
                        });

                        var wynik = R13.Transpose() * R2.Transpose() * R3.Transpose() * xyz;
                        //       wektory2TableAdapter.Insert(stanowisko, cel, wynik[0, 0], wynik[1, 0], wynik[2, 0], "Klasyczne-wsp.przyb.", przyrosty.X, przyrosty.Y, przyrosty.H);

                        var    X = wynik[0, 0] + sx;
                        var    Y = wynik[1, 0] + sy;
                        var    Z = wynik[2, 0] + sz;
                        double fi, lambda, h, xGk, yGk, ksi2, eta2;
                        modultransformacji.Hirvonen(X, Y, Z, a, b, out fi, out lambda, out h);
                        modultransformacji.GaussKruger1(fi, lambda, lambda, out xGk, out yGk);
                        modultransformacji.odczytBL(fi, lambda, out ksi2, out eta2);
                        transformacjaTableAdapter.Insert(cel, X, Y, Z, fi, lambda, h, xGk, yGk, ksi2, eta2, przyrosty.X, przyrosty.Y,
                                                         przyrosty.H);
                    }
                    stanowsikopoprzednie = stanowisko;
                    toolStripProgressBar1.Increment(1);
                    rtBotworz.richTextBox1.AppendText(dowyswietlenia);
                }
                if (braknawiazania)
                {
                    rtBotworz.richTextBox1.AppendText("Brak nawiązania!!");
                    break;
                }
                this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
                toolStripProgressBar1.Value = 0;
                this.wektory2TableAdapter.Fill(this.database1DataSet.Wektory2);
                oblicz_GK();
            }
        }
コード例 #3
0
ファイル: FormTest.cs プロジェクト: PBuzz/Inz2
        void odczyt()
        {
            this.tachimetrTableAdapter1.Fill(this.database1DataSet.Tachimetr);
            this.punktyNieznaneTableAdapter.Fill(this.database1DataSet.PunktyNieznane);
            this.wspolrzedneTableAdapter1.Fill(this.database1DataSet.Wspolrzedne);
            var rtBotworz = new FormOtworzRTB();

            rtBotworz.MdiParent = this.MdiParent;
            rtBotworz.Show();
            var    oblazymut            = new Wspprzyb();
            double azymut               = 0;
            double odczyt_nawiazania    = 0;
            bool   nawiazanie           = false;
            string stanowsikopoprzednie = "";
            bool   czyjuz               = false;
            bool   braknawiazania       = true;

            while (czyjuz != true)
            {
                czyjuz = true;
                foreach (DataRow row in database1DataSet.Tachimetr.Rows)
                {
                    var stanowisko = row.ItemArray[1].ToString();
                    if (stanowisko != stanowsikopoprzednie)
                    {
                        nawiazanie = false;
                    }
                    var    cel = row.ItemArray[2].ToString();
                    string wynikc, wyniks;
                    bool   celistnieje =
                        database1DataSet.PunktyNieznane.Any(punkt => punkt.Nazwa.Equals(cel) && punkt.Znany == true);
                    if (celistnieje)
                    {
                        wynikc = "Znany ";
                    }
                    else
                    {
                        wynikc = "Nieznany";
                        czyjuz = false;
                    }
                    bool stanowiskoistnieje =
                        database1DataSet.PunktyNieznane.Any(
                            punkt => punkt.Nazwa.Equals(stanowisko) && punkt.Znany == true);
                    if (stanowiskoistnieje)
                    {
                        wyniks = "Znany ";
                    }
                    else
                    {
                        wyniks = "Nieznany";
                        czyjuz = false;
                    }
                    string dowyswietlenia = string.Format("stanowisko: {0}  {3}  cel: {1} {2}\n", stanowisko, cel,
                                                          wynikc, wyniks);
                    if (celistnieje && stanowiskoistnieje)
                    {
                        bool    stanowisko3 = database1DataSet.PunktyNieznane.Any(punkt => punkt.Nazwa.Equals(stanowisko));
                        DataRow celRow      =
                            database1DataSet.PunktyNieznane.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                        DataRow stRow =
                            database1DataSet.PunktyNieznane.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        double sx = Convert.ToDouble(stRow[4]);
                        double sy = Convert.ToDouble(stRow[5]);
                        double cx = Convert.ToDouble(celRow[4]);
                        double cy = Convert.ToDouble(celRow[5]);
                        azymut            = oblazymut.Azymut(sx, sy, cx, cy, 2);
                        dowyswietlenia    = dowyswietlenia + "azymut: " + azymut + "\n";
                        nawiazanie        = true;
                        odczyt_nawiazania = Convert.ToDouble(row.ItemArray[3]);
                        braknawiazania    = false;
                    }
                    if (celistnieje == false && stanowiskoistnieje && nawiazanie)
                    {
                        DataRow stRow =
                            database1DataSet.PunktyNieznane.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        double sx  = Convert.ToDouble(stRow[4]);
                        double sy  = Convert.ToDouble(stRow[5]);
                        double sz  = Convert.ToDouble(stRow[6]);
                        var    odl = Convert.ToDouble(row[5]);
                        var    hi  = Convert.ToDouble(row[6]);
                        var    hc  = Convert.ToDouble(row[7]);
                        //var odl = oblazymut.redukcjaOdleglosci(Convert.ToDouble(row[4]), Convert.ToDouble(row[5]));

                        var wsp = oblazymut.Oblbiegunowe(sx, sy, sz, odl, Convert.ToDouble(row.ItemArray[3]), azymut,
                                                         odczyt_nawiazania, Convert.ToDouble(row[4]), hi, hc);


                        //var wsp2 = oblazymut.Oblbiegunowe()
                        this.punktyNieznaneTableAdapter.Fill(this.database1DataSet.PunktyNieznane);
                        int id = database1DataSet.PunktyNieznane.Max(wartosc => wartosc.Id) + 1;
                        punktyNieznaneTableAdapter.Insert(id, cel, true, false, wsp.X, wsp.Y, wsp.H);
                        int id2 = WspolrzedneBindingSource.Count + 1;
                        // wspolrzedneTableAdapter1.Insert(id, cel, wsp.X, wsp.Y, wsp.H, false);
                        this.punktyNieznaneTableAdapter.Fill(this.database1DataSet.PunktyNieznane);
                        this.wspolrzedneTableAdapter1.Fill(this.database1DataSet.Wspolrzedne);
                    }
                    stanowsikopoprzednie = stanowisko;

                    rtBotworz.richTextBox1.AppendText(dowyswietlenia);
                }
                if (braknawiazania)
                {
                    rtBotworz.richTextBox1.AppendText("Brak nawiązania!!");
                    break;
                }
            }
        }
コード例 #4
0
ファイル: FormTest.cs プロジェクト: PBuzz/Inz2
        void wyrównanie()
        {
            double bkier = Properties.Settings.Default.bladkierunkucc;
            double ro    = 2000000 / Math.PI;
            var    dt    = new DataTable();

            var        dt2 = new DataTable();
            DataColumn newColumnNazwadt2 = new DataColumn("Nazwa", typeof(double));
            DataColumn newColumnXdt2     = new DataColumn("X", typeof(double));
            DataColumn newColumnYdt2     = new DataColumn("Y", typeof(double));
            DataColumn newColumnHdt2     = new DataColumn("H", typeof(double));

            newColumnXdt2.DefaultValue = 0;
            newColumnHdt2.DefaultValue = 0;
            newColumnYdt2.DefaultValue = 0;
            dt2.Columns.Add(newColumnNazwadt2);
            dt2.Columns.Add(newColumnXdt2);
            dt2.Columns.Add(newColumnYdt2);
            dt2.Columns.Add(newColumnHdt2);

            var listapkt   = new List <string>();
            var lList      = new List <double>();
            var pList      = new List <double>();
            var obliczenia = new Wspprzyb();

            foreach (DataRow row in database1DataSet.PunktyNieznane.Rows)
            {
                if (Convert.ToBoolean(row.ItemArray[2]) == true && Convert.ToBoolean(row.ItemArray[3]) == false)
                {//tworzy tabele macierz A, pustą
                    string     nazwa      = row.ItemArray[1].ToString();
                    string     nazwaX     = "__X__" + nazwa;
                    string     nazwaY     = "__Y__" + nazwa;
                    string     nazwaK     = "__K__" + nazwa;
                    DataColumn newColumnX = new DataColumn(nazwaX, typeof(double));
                    DataColumn newColumnY = new DataColumn(nazwaY, typeof(double));
                    DataColumn newColumnK = new DataColumn(nazwaK, typeof(double));
                    newColumnX.DefaultValue = 0;
                    newColumnK.DefaultValue = 0;
                    newColumnY.DefaultValue = 0;
                    dt.Columns.Add(newColumnX);
                    dt.Columns.Add(newColumnY);
                    dt.Columns.Add(newColumnK);
                    listapkt.Add(row["Nazwa"].ToString());
                }
            }
            dataGridView1.DataSource = dt;

            foreach (DataRow rowtachimetr in database1DataSet.Tachimetr.Rows)
            {
                //Wypełnianie macierzy równaniami poprawek
                string  cel         = rowtachimetr.ItemArray[2].ToString();
                string  stanowisko  = rowtachimetr.ItemArray[1].ToString();
                double  dlugosc     = Convert.ToDouble(rowtachimetr.ItemArray[5]);
                DataRow celRow      = database1DataSet.PunktyNieznane.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                DataRow stRow       = database1DataSet.PunktyNieznane.AsEnumerable().Where(rowst => rowst.Nazwa == stanowisko).FirstOrDefault();
                double  sx          = Convert.ToDouble(stRow[4]); //wspolrzedne, s- stanowsiko, c- cel
                double  sy          = Convert.ToDouble(stRow[5]);
                double  cx          = Convert.ToDouble(celRow[4]);
                double  cy          = Convert.ToDouble(celRow[5]);
                double  dx          = cx - sx;                      //przyrosty
                double  dy          = cy - sy;
                double  d           = Math.Sqrt(dx * dx + dy * dy); //długość ze wsp
                double  rownKierStX = -dy / Math.Pow(d, 2);         //równania do macierzy A, St-stanowisko, C-cel,Dl-Długość
                double  rownKierStY = dx / Math.Pow(d, 2);
                double  rownKierCx  = dy / Math.Pow(d, 2);
                double  rownKierCy  = -dx / Math.Pow(d, 2);
                double  rownDlStx   = -dx / d;
                double  rownDlSty   = -dy / d;
                double  rownDlCx    = dx / d;
                double  rownDlCy    = -dy / d;
                double  azymut      = obliczenia.Azymut(sx, sy, cx, cy, 2);


                var  row         = dt.NewRow();
                var  row2        = dt.NewRow();
                bool celistnieje = database1DataSet.PunktyNieznane.Any(punkt => punkt.Nazwa.Equals(cel) && punkt.Staly == false);
                if (celistnieje)
                {
                    row["__X__" + cel]  = rownKierCx * ro;
                    row["__Y__" + cel]  = rownKierCy * ro;
                    row2["__X__" + cel] = rownDlCx;
                    row2["__Y__" + cel] = rownDlCy;
                }

                bool stanowiskoistnieje =
                    database1DataSet.PunktyNieznane.Any(
                        punkt => punkt.Nazwa.Equals(stanowisko) && punkt.Staly == false);
                if (stanowiskoistnieje)
                {
                    row["__X__" + stanowisko]  = rownKierStX * ro;
                    row["__Y__" + stanowisko]  = rownKierStY * ro;
                    row["__K__" + stanowisko]  = -1;
                    row2["__X__" + stanowisko] = rownDlStx;
                    row2["__Y__" + stanowisko] = rownDlSty;
                }
                //if (stanowiskoistnieje || celistnieje)
                // {
                dt.Rows.Add(row);
                dt.Rows.Add(row2);
                //  }
                //lista macierz l
                lList.Add(azymut - Convert.ToDouble(rowtachimetr.ItemArray[3]));
                lList.Add(d - dlugosc);

                //lista macierz p
                pList.Add(1 / Math.Pow(bkier, 2));
                pList.Add(1 / Math.Pow(dlugosc, 2));
            }
            int             liczbakolumn  = dt.Columns.Count;
            int             liczbawierszy = dt.Rows.Count;
            Matrix <double> A             = Matrix <double> .Build.Dense(liczbawierszy, liczbakolumn);

            for (int i = 0; i < liczbawierszy; i++)
            {
                for (int j = 0; j < liczbakolumn; j++)
                {
                    if (dt.Rows[i][j] == DBNull.Value)
                    {
                        A[i, j] = 0;
                    }
                    else
                    {
                        A[i, j] = Convert.ToDouble(dt.Rows[i][j]);
                    }
                }
            }
            Matrix <double> L = Matrix <double> .Build.Dense(lList.Count, 1);

            for (int i = 0; i < lList.Count; i++)
            {
                L[i, 0] = lList[i];
            }
            var parray = pList.ToArray();
            // var P = Matrix<double>.Build;

            Matrix <double> P = new DiagonalMatrix(pList.Count, pList.Count, parray);

            FormOtworzRTB macierza = new FormOtworzRTB();

            macierza.Show();
            macierza.richTextBox1.AppendText(A.ToMatrixString());

            var AT          = A.Transpose();
            var ATP         = AT.Multiply(P);
            var ATPA        = ATP.Multiply(A);
            var ATPAinverse = ATPA.Inverse();
            var ATPL        = ATP.Multiply(L);
            var X           = ATPAinverse.Multiply(ATPL);
            var X2          = A.Solve(L);

            macierza.richTextBox1.AppendText("\r\nA\r\n" + X.ToMatrixString() + "\r\n");
            var xTab = X.ToArray();

            macierza.richTextBox1.AppendText("\r\nX\r\n" + X.ToString() + "\r\n");
            macierza.richTextBox1.AppendText("\r\nX2\r\n" + X2.ToString() + "\r\n");
            var ax  = A.Multiply(X);
            var axl = ax - L;

            macierza.richTextBox1.AppendText("\r\nAx+L\r\n" + axl.ToString() + "\r\n");

            macierza.richTextBox1.AppendText("\r\nP\r\n" + P.ToString() + "\r\n");

            int i2 = 0;

            foreach (DataRow row in database1DataSet.PunktyNieznane.Rows)
            {
                if (Convert.ToBoolean(row.ItemArray[2]) == true && Convert.ToBoolean(row.ItemArray[3]) == false)
                {
                    var nowywiersz = dt2.NewRow();
                    nowywiersz["Nazwa"] = row.ItemArray[1];
                    nowywiersz["X"]     = Convert.ToDouble(row.ItemArray[4]) + pList[i2];
                    i2++;
                    nowywiersz["Y"] = Convert.ToDouble(row.ItemArray[5]) + pList[i2];
                    i2 += 2;
                    nowywiersz["H"] = Convert.ToDouble(row.ItemArray[6]);
                    dt2.Rows.Add(nowywiersz);
                }
            }

            dataGridView2.DataSource = dt2;
            dataGridView2.Columns["Nazwa"].DefaultCellStyle.Format = "#";
        }
コード例 #5
0
        private void wyrownanie()
        {
            this.wspolrzedneTableAdapter1.Fill(database1DataSet.Wspolrzedne);
            double bkier = Properties.Settings.Default.bladkierunkucc;
            double ro    = 2000000 / Math.PI;
            var    dt    = new DataTable();

            var        dt2 = new DataTable();
            DataColumn newColumnNazwadt2 = new DataColumn("Nazwa", typeof(double));
            DataColumn newColumnXdt2     = new DataColumn("X", typeof(double));
            DataColumn newColumnYdt2     = new DataColumn("Y", typeof(double));
            DataColumn newColumnHdt2     = new DataColumn("Z", typeof(double));

            newColumnXdt2.DefaultValue = 0;
            newColumnHdt2.DefaultValue = 0;
            newColumnYdt2.DefaultValue = 0;
            dt2.Columns.Add(newColumnNazwadt2);
            dt2.Columns.Add(newColumnXdt2);
            dt2.Columns.Add(newColumnYdt2);
            dt2.Columns.Add(newColumnHdt2);

            var listapkt   = new List <string>();
            var lList      = new List <double>();
            var pList      = new List <double>();
            var obliczenia = new Wspprzyb();

            foreach (DataRow row in database1DataSet.Wektory2.Rows)
            {
                var  baza         = row["Poczatek"].ToString();
                var  rover        = row["Koniec"].ToString();
                bool bazaistnieje =
                    database1DataSet.Wspolrzedne.Any(punkt => punkt.Nazwa.Equals(baza) && punkt.Staly.Equals(true));
                bool roveristnieje = database1DataSet.Wspolrzedne.Any(punkt => punkt.Nazwa.Equals(rover) && punkt.Staly.Equals(true));
                if (bazaistnieje == false && roveristnieje == false)
                {
                    listapkt.Add(baza);
                    listapkt.Add(rover);
                }
            }
            var hashListaPkt = new HashSet <string>(listapkt);

            foreach (var row in hashListaPkt)
            {
                //tworzy tabele macierz A, pustą
                string     nazwa      = row;
                string     nazwaX     = "__X__" + nazwa;
                string     nazwaY     = "__Y__" + nazwa;
                string     nazwaK     = "__Z__" + nazwa;
                DataColumn newColumnX = new DataColumn(nazwaX, typeof(double));
                DataColumn newColumnY = new DataColumn(nazwaY, typeof(double));
                DataColumn newColumnZ = new DataColumn(nazwaK, typeof(double));
                newColumnX.DefaultValue = 0;
                newColumnZ.DefaultValue = 0;
                newColumnY.DefaultValue = 0;
                dt.Columns.Add(newColumnX);
                dt.Columns.Add(newColumnY);
                dt.Columns.Add(newColumnZ);
            }

            foreach (DataRow row in database1DataSet.Wektory2.Rows)
            {
                var  baza         = row["Poczatek"].ToString();
                var  rover        = row["Koniec"].ToString();
                var  row1         = dt.NewRow();
                var  row2         = dt.NewRow();
                var  row3         = dt.NewRow();
                bool bazaistnieje =
                    database1DataSet.Wspolrzedne.Any(punkt => punkt.Nazwa.Equals(baza) && punkt.Staly.Equals(true));
                if (bazaistnieje)
                {
                    var bazaRow = database1DataSet.Wspolrzedne.Where(
                        rowcel => rowcel.Nazwa.Equals(baza) && rowcel.Staly.Equals(true)).FirstOrDefault();
                    row1["__X__" + rover] = 1;
                    row2["__Y__" + rover] = 1;
                    row3["__Z__" + rover] = 1;
                    var DX = Convert.ToDouble(row["DX"]);
                    var DY = Convert.ToDouble(row["DY"]);
                    var DZ = Convert.ToDouble(row["DZ"]);

                    var mx = Convert.ToDouble(row["mx"]);
                    var my = Convert.ToDouble(row["my"]);
                    var mz = Convert.ToDouble(row["mz"]);

                    lList.Add(bazaRow.X + DX);
                    lList.Add(bazaRow.Y + DY);
                    lList.Add(bazaRow.Z + DZ);
                    pList.Add(mx);
                    pList.Add(my);
                    pList.Add(mz);
                }
                else
                {
                    var DX = Convert.ToDouble(row["DX"]);
                    var DY = Convert.ToDouble(row["DY"]);
                    var DZ = Convert.ToDouble(row["DZ"]);

                    var mx = Convert.ToDouble(row["mx"]);
                    var my = Convert.ToDouble(row["my"]);
                    var mz = Convert.ToDouble(row["mz"]);

                    row1["__X__" + rover] = 1;
                    row2["__Y__" + rover] = 1;
                    row3["__Z__" + rover] = 1;
                    row1["__X__" + baza]  = -1;
                    row2["__Y__" + baza]  = -1;
                    row3["__Z__" + baza]  = -1;
                    lList.Add(DX);
                    lList.Add(DY);
                    lList.Add(DZ);
                    pList.Add(mx);
                    pList.Add(my);
                    pList.Add(mz);
                }
                dt.Rows.Add(row1);
                dt.Rows.Add(row2);
                dt.Rows.Add(row3);
            }


            int             liczbakolumn  = dt.Columns.Count;
            int             liczbawierszy = dt.Rows.Count;
            Matrix <double> A             = Matrix <double> .Build.Dense(liczbawierszy, liczbakolumn);

            for (int i = 0; i < liczbawierszy; i++)
            {
                for (int j = 0; j < liczbakolumn; j++)
                {
                    if (dt.Rows[i][j] == DBNull.Value)
                    {
                        A[i, j] = 0;
                    }
                    else
                    {
                        A[i, j] = Convert.ToDouble(dt.Rows[i][j]);
                    }
                }
            }
            Matrix <double> L = Matrix <double> .Build.Dense(lList.Count, 1);

            for (int i = 0; i < lList.Count; i++)
            {
                L[i, 0] = lList[i];
            }
            Matrix <double> P = Matrix <double> .Build.Dense(pList.Count, pList.Count);

            for (int i = 0; i < pList.Count; i++)
            {
                P[i, i] = pList[i];
            }
            P = P.Inverse();
            var x1 = (A.Transpose() * P * A);

            x1 = x1.Inverse();
            var x2      = A.Transpose() * P * L;
            var x       = x1 * x2;
            int licznik = 0;

            foreach (var row in hashListaPkt)
            {
                wyrownanieTableAdapter1.Insert(row, x[licznik, 0], x[licznik + 1, 0], x[licznik + 2, 0], x1[licznik, licznik], x1[licznik + 1, licznik + 1],
                                               x1[licznik + 2, licznik + 2]);
                licznik += 3;
            }
            dataGridView1.DataSource = dt;
            dataGridView1.Refresh();
            wyrownanieTableAdapter.Fill(this.database1DataSet.Wyrownanie);
        }