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); }
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(); } }
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; } } }
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 = "#"; }
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); }