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