private void DrawGRID() { g.FillRectangle(GainBrush, 0, 0, 400, 400); //drawGREEN(Mx,My);//сначала нарисовать зеленые клеточки for (int i = 0; i <= 400; i += a_k) { g.DrawLine(blackPen, new Point(i, 0), new Point(i, 400)); g.DrawLine(blackPen, new Point(0, i), new Point(400, i)); } int y = 0; int num = 0; int x = 0; for (int i = 0; i < textBox1.Text.Length; i++) { Pxy.Add(new XY(0, 0)); } do { Thread.Sleep(1); g.DrawString(alf1[num].ToString(), drawFont, BlackBrush, new Point(x, y), drawFormat); num++; x += a_k; if (x >= a_k * a) { x = 0; y += a_k; } //возможно >= 400 } while (num < alf1.Length); }
// Set the covariance, \mat{P}_{xy}, between the feature state and // the robot state. public void set_Pxy(MatrixFixed new_Pxy) { Pxy.Update(new_Pxy); }
private void button1_Click(object sender, EventArgs e) { // Шаги Double Hx = Convert.ToDouble(this.dataGridView3.Rows[1].Cells[0].Value) - Convert.ToDouble(this.dataGridView3.Rows[0].Cells[0].Value), Hy = Convert.ToDouble(this.dataGridView3.Columns[2].HeaderText) - Convert.ToDouble(this.dataGridView3.Columns[1].HeaderText); textBox1.Text = Hx.ToString(); textBox2.Text = Hy.ToString(); // Ложные нули Double C1 = Convert.ToDouble(this.dataGridView3.Rows[this.dataGridView3.RowCount / 2].Cells[0].Value), C2 = Convert.ToDouble(this.dataGridView3.Columns[this.dataGridView3.ColumnCount / 2].HeaderText); Int32 NullX = dataGridView3.RowCount / 2 - 1, NullY = this.dataGridView3.ColumnCount / 2; textBox3.Text = C1.ToString() + " (" + NullX.ToString() + ")"; textBox4.Text = C2.ToString() + " (" + NullY.ToString() + ")"; // Заполняем расчетную таблицу this.dataGridView4.ColumnCount = 0; this.dataGridView4.Columns.Add("ColumnUV", "U\\V"); for (int i = 1; i <= this.dataGridView3.ColumnCount - 2; i++) { this.dataGridView4.Columns.Add("Column" + i.ToString(), (i - NullY).ToString()); } DataGridViewCell tmpCell = null; DataGridViewRow tmpRow = null; for (int i = 0; i <= this.dataGridView3.RowCount - 2; i++) { tmpCell = new DataGridViewTextBoxCell(); tmpRow = new DataGridViewRow(); tmpCell.Style.BackColor = Color.LightGray; tmpCell.Value = (i - NullX).ToString(); tmpRow.Cells.AddRange(tmpCell); this.dataGridView4.Rows.Add(tmpRow); } // Считываем значения в матрицы Array mat = Array.CreateInstance(typeof(Double), this.dataGridView3.RowCount - 1, this.dataGridView3.ColumnCount - 2); for (int i = 0; i <= this.dataGridView3.RowCount - 2; i++) { for (int j = 1; j <= this.dataGridView3.ColumnCount - 2; j++) { if (this.dataGridView3.Rows[i].Cells[j].Value.ToString() == "-") { mat.SetValue(100500, i, j - 1); } else { mat.SetValue(Convert.ToDouble(this.dataGridView3.Rows[i].Cells[j].Value), i, j - 1); } } } Array matDown = Array.CreateInstance(typeof(Double), this.dataGridView3.RowCount - 1, this.dataGridView3.ColumnCount - 2); for (int i = mat.GetLowerBound(0); i <= mat.GetUpperBound(0); i++) { for (int j = mat.GetLowerBound(1); j <= mat.GetUpperBound(1); j++) { if (Convert.ToDouble(mat.GetValue(i, j)) == 100500) { matDown.SetValue(100500, i, j); } else { matDown.SetValue(Convert.ToDouble(mat.GetValue(i, j)) * Convert.ToDouble(this.dataGridView4.Rows[i].Cells[0].Value), i, j); } } } Array matUp = Array.CreateInstance(typeof(Double), this.dataGridView3.RowCount - 1, this.dataGridView3.ColumnCount - 2); for (int i = mat.GetLowerBound(0); i <= mat.GetUpperBound(0); i++) { for (int j = mat.GetLowerBound(1); j <= mat.GetUpperBound(1); j++) { if (Convert.ToDouble(mat.GetValue(i, j)) == 100500) { matUp.SetValue(100500, i, j); } else { matUp.SetValue(Convert.ToDouble(mat.GetValue(i, j)) * Convert.ToDouble(this.dataGridView4.Columns[j + 1].HeaderText), i, j); } } } // Выводим расчетную матрицу for (int i = 0; i <= this.dataGridView4.RowCount - 1; i++) { for (int j = 1; j <= this.dataGridView4.ColumnCount - 1; j++) { if (Convert.ToDouble(mat.GetValue(i, j - 1)) == 100500) { dataGridView4.Rows[i].Cells[j].Value = "-"; } else { dataGridView4.Rows[i].Cells[j].Value = matDown.GetValue(i, j - 1) + "\\" + mat.GetValue(i, j - 1) + "\\" + matUp.GetValue(i, j - 1); } } } // Дополнительные данные this.dataGridView4.Columns.Add("ColumnMu", "mu"); this.dataGridView4.Columns.Add("ColumnMuiui", "mui*ui"); this.dataGridView4.Columns.Add("ColumnMuiui2", "mui*ui^2"); this.dataGridView4.Columns.Add("ColumnUiE", "ui*E(mij)*vj"); tmpCell = new DataGridViewTextBoxCell(); tmpRow = new DataGridViewRow(); tmpCell.Style.BackColor = Color.LightGray; tmpCell.Value = "mv"; tmpRow.Cells.AddRange(tmpCell); this.dataGridView4.Rows.Add(tmpRow); tmpCell = new DataGridViewTextBoxCell(); tmpRow = new DataGridViewRow(); tmpCell.Style.BackColor = Color.LightGray; tmpCell.Value = "mvj*vj"; tmpRow.Cells.AddRange(tmpCell); this.dataGridView4.Rows.Add(tmpRow); tmpCell = new DataGridViewTextBoxCell(); tmpRow = new DataGridViewRow(); tmpCell.Style.BackColor = Color.LightGray; tmpCell.Value = "mvj*vj^2"; tmpRow.Cells.AddRange(tmpCell); this.dataGridView4.Rows.Add(tmpRow); tmpCell = new DataGridViewTextBoxCell(); tmpRow = new DataGridViewRow(); tmpCell.Style.BackColor = Color.LightGray; tmpCell.Value = "vj*E(mij)*ui"; tmpRow.Cells.AddRange(tmpCell); this.dataGridView4.Rows.Add(tmpRow); Int32 tmp = 0; // mv for (int j = 1; j <= this.dataGridView3.ColumnCount - 1; j++) { tmp = 0; for (int i = 0; i <= this.dataGridView3.RowCount - 2; i++) { if (this.dataGridView3.Rows[i].Cells[j].Value.ToString() != "-") { tmp += Convert.ToInt32(this.dataGridView3.Rows[i].Cells[j].Value); } } this.dataGridView4.Rows[dataGridView3.RowCount - 1].Cells[j].Value = tmp; } // mu for (int i = 0; i <= this.dataGridView3.RowCount - 1; i++) { tmp = 0; for (int j = 1; j <= this.dataGridView3.ColumnCount - 2; j++) { if (this.dataGridView3.Rows[i].Cells[j].Value.ToString() != "-") { tmp += Convert.ToInt32(this.dataGridView3.Rows[i].Cells[j].Value); } } this.dataGridView4.Rows[i].Cells[dataGridView3.ColumnCount - 1].Value = tmp; } // mui*ui for (int i = 0; i <= this.dataGridView4.RowCount - 5; i++) { this.dataGridView4.Rows[i].Cells[dataGridView4.ColumnCount - 3].Value = Convert.ToDouble(this.dataGridView4.Rows[i].Cells[0].Value) * Convert.ToDouble(this.dataGridView4.Rows[i].Cells[dataGridView4.ColumnCount - 4].Value); } // mvj*vj for (int i = 1; i <= this.dataGridView4.ColumnCount - 5; i++) { this.dataGridView4.Rows[this.dataGridView4.RowCount - 3].Cells[i].Value = Convert.ToDouble(this.dataGridView4.Columns[i].HeaderText) * Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[i].Value); } // mui*ui^2 for (int i = 0; i <= this.dataGridView4.RowCount - 5; i++) { this.dataGridView4.Rows[i].Cells[dataGridView4.ColumnCount - 2].Value = Convert.ToDouble(this.dataGridView4.Rows[i].Cells[0].Value) * Convert.ToDouble(this.dataGridView4.Rows[i].Cells[0].Value) * Convert.ToDouble(this.dataGridView4.Rows[i].Cells[dataGridView4.ColumnCount - 4].Value); } // mvj*vj^2 for (int i = 1; i <= this.dataGridView4.ColumnCount - 5; i++) { this.dataGridView4.Rows[this.dataGridView4.RowCount - 2].Cells[i].Value = Convert.ToDouble(this.dataGridView4.Columns[i].HeaderText) * Convert.ToDouble(this.dataGridView4.Columns[i].HeaderText) * Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[i].Value); } // ui*E(mij)*vj Double Sum = 0; for (int i = mat.GetLowerBound(0); i <= mat.GetUpperBound(0); i++) { Sum = 0; for (int j = mat.GetLowerBound(1); j <= mat.GetUpperBound(1); j++) { if (Convert.ToDouble(matUp.GetValue(i, j)) != 100500) { Sum += Convert.ToDouble(matUp.GetValue(i, j)); } } this.dataGridView4.Rows[i].Cells[this.dataGridView4.ColumnCount - 1].Value = Sum * Convert.ToDouble(this.dataGridView4.Rows[i].Cells[0].Value); } // vj*E(mij)*ui for (int i = mat.GetLowerBound(1); i <= mat.GetUpperBound(1); i++) { Sum = 0; for (int j = mat.GetLowerBound(0); j <= mat.GetUpperBound(0); j++) { if (Convert.ToDouble(matDown.GetValue(j, i)) != 100500) { Sum += Convert.ToDouble(matDown.GetValue(j, i)); } } this.dataGridView4.Rows[this.dataGridView4.RowCount - 1].Cells[i + 1].Value = Sum * Convert.ToDouble(this.dataGridView4.Columns[i + 1].HeaderText); } // Подсчитаем суммы Sum = 0; for (int i = 1; i <= this.dataGridView4.ColumnCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 3].Cells[i].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 3].Cells[this.dataGridView4.ColumnCount - 4].Value = Sum; Sum = 0; for (int i = 1; i <= this.dataGridView4.ColumnCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 2].Cells[i].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 2].Cells[this.dataGridView4.ColumnCount - 4].Value = Sum; Sum = 0; for (int i = 1; i <= this.dataGridView4.ColumnCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 1].Cells[i].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 1].Cells[this.dataGridView4.ColumnCount - 4].Value = Sum; Sum = 0; for (int i = 0; i <= this.dataGridView4.RowCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[i].Cells[this.dataGridView4.ColumnCount - 3].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 3].Value = Sum; Sum = 0; for (int i = 0; i <= this.dataGridView4.RowCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[i].Cells[this.dataGridView4.ColumnCount - 2].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 2].Value = Sum; Sum = 0; for (int i = 0; i <= this.dataGridView4.RowCount - 5; i++) { Sum += Convert.ToDouble(this.dataGridView4.Rows[i].Cells[this.dataGridView4.ColumnCount - 1].Value); } this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 1].Value = Sum; // Вычисление по формулам Double U, V, U2, V2, du, dv, r; U = Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 3].Value) / N; textBox5.Text = U.ToString(); V = Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 3].Cells[this.dataGridView4.ColumnCount - 4].Value) / N; textBox6.Text = V.ToString(); U2 = Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 2].Value) / N; textBox7.Text = U2.ToString(); V2 = Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 2].Cells[this.dataGridView4.ColumnCount - 4].Value) / N; textBox8.Text = V2.ToString(); du = Math.Sqrt(U2 - U * U); textBox9.Text = du.ToString(); dv = Math.Sqrt(V2 - V * V); textBox10.Text = dv.ToString(); r = (Convert.ToDouble(this.dataGridView4.Rows[this.dataGridView4.RowCount - 4].Cells[this.dataGridView4.ColumnCount - 1].Value) - N * U * V) / (N * du * dv); textBox11.Text = r.ToString(); // Уравнение регрессий Double X, Y; X = U * Hx + C1; Y = V * Hy + C2; textBox18.Text = X.ToString(); textBox17.Text = Y.ToString(); Double Pxy, Pyx; Pyx = r * Hy / Hx * dv / du; Pxy = r * Hx / Hy * du / dv; textBox16.Text = Pyx.ToString(); textBox15.Text = Pxy.ToString(); String yx, xy; yx = "y(x) = " + Math.Round(Pyx, 2).ToString() + "x - " + Math.Round(Pyx * X + Y, 2).ToString(); xy = "x(y) = " + Math.Round(Pxy, 2).ToString() + "y - " + Math.Round(Pxy * Y + X, 2).ToString(); textBox14.Text = yx; textBox13.Text = xy; int x1, x2, y1, y2; PaintEventArgs pea = new PaintEventArgs(this.panel1.CreateGraphics(), this.panel1.ClientRectangle); Graphics g = pea.Graphics; Pen pen = new Pen(Color.Red, 2); x1 = 0; y1 = (int)(Pyx * 0 - Pyx * X + Y); x2 = 100; y2 = (int)(Pyx * 100 - Pyx * X + Y); g.DrawLine(pen, x1 + 50, y1, x2 + 50, y2); pen = new Pen(Color.Blue, 2); x1 = (int)(Pxy * 0 - Pxy * Y + X); y1 = 0; x2 = (int)(Pxy * 100 - Pxy * Y + X); y2 = 100; g.DrawLine(pen, x1 + 50, y1, x2 + 50, y2); }