Beispiel #1
0
        public DisplayTriangulation(TriangulationByMinimumAngle.MinimalAngleAlgorithm.TriangulationStructure dataToDispaly)
        {
            InitializeComponent();
            chart1.Series.Clear();
            chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0;
            int i = 0;

            foreach (TriangulationByMinimumAngle.Triangle tr in dataToDispaly.triangles)
            {
                TriangulationByMinimumAngle.Point a1 = dataToDispaly.points[tr.A];
                TriangulationByMinimumAngle.Point a2 = dataToDispaly.points[tr.B];
                TriangulationByMinimumAngle.Point a3 = dataToDispaly.points[tr.C];
                chart1.Series.Add("Region" + i);
                chart1.Series["Region" + i].ChartType   = SeriesChartType.Line;
                chart1.Series["Region" + i].BorderWidth = 3;
                chart1.Series["Region" + i].Color       = Color.Black;
                chart1.Series["Region" + i++].Points.DataBindXY(new List <double>()
                {
                    a1.X, a2.X, a3.X, a1.X
                }, new List <double> {
                    a1.Y, a2.Y, a3.Y, a1.Y
                });
            }
        }
Beispiel #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            try {
                double maxArea = Convert.ToDouble(tbxMaxArea.Text);
                TriangulationByMinimumAngle.MinimalAngleAlgorithm.TriangulationStructure outInfo = new TriangulationByMinimumAngle.MinimalAngleAlgorithm.TriangulationStructure();

                //задаємо вершини точнок фігури
                if (comboBox1.SelectedIndex == 0)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(0, 0),
                        new TriangulationByMinimumAngle.Point(2, 0),
                        new TriangulationByMinimumAngle.Point(2, 3),
                        new TriangulationByMinimumAngle.Point(0, 3)
                    }, maxArea);
                }
                else if (comboBox1.SelectedIndex == 1)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(0, 0),
                        new TriangulationByMinimumAngle.Point(2, 0),
                        new TriangulationByMinimumAngle.Point(2, 3),
                        new TriangulationByMinimumAngle.Point(0, 3)
                    }, maxArea);
                }
                else if (comboBox1.SelectedIndex == 2)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(0, 1),
                        new TriangulationByMinimumAngle.Point(1, 0),
                        new TriangulationByMinimumAngle.Point(2, 0),
                        new TriangulationByMinimumAngle.Point(0, 2)
                    }, maxArea);
                }
                else if (comboBox1.SelectedIndex == 3)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(-3, 0),
                        new TriangulationByMinimumAngle.Point(3, 0),
                        new TriangulationByMinimumAngle.Point(0, 3)
                    }, maxArea);
                }
                else if (comboBox1.SelectedIndex == 4)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(-2, 0),
                        new TriangulationByMinimumAngle.Point(2, 0),
                        new TriangulationByMinimumAngle.Point(2, 2),
                        new TriangulationByMinimumAngle.Point(-2, 2)
                    }, maxArea);
                }
                else if (comboBox1.SelectedIndex == 5)
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(-3, 0),
                        new TriangulationByMinimumAngle.Point(-1, 0),
                        new TriangulationByMinimumAngle.Point(0, 1),
                        new TriangulationByMinimumAngle.Point(1, 0),
                        new TriangulationByMinimumAngle.Point(3, 0),
                        new TriangulationByMinimumAngle.Point(0, 3)
                    }, maxArea);
                }
                else
                {
                    outInfo = TriangulationByMinimumAngle.MinimalAngleAlgorithm.Triangulate(
                        new List <TriangulationByMinimumAngle.Point>()
                    {
                        new TriangulationByMinimumAngle.Point(-3, 0),
                        new TriangulationByMinimumAngle.Point(-1, -1),
                        new TriangulationByMinimumAngle.Point(-2, -3),
                        new TriangulationByMinimumAngle.Point(0, -2),
                        new TriangulationByMinimumAngle.Point(2, -3),
                        new TriangulationByMinimumAngle.Point(1, -1),
                        new TriangulationByMinimumAngle.Point(3, 0),
                        new TriangulationByMinimumAngle.Point(1, 0),
                        new TriangulationByMinimumAngle.Point(0, 3),
                        new TriangulationByMinimumAngle.Point(-1, 0)
                    }, maxArea);
                }

                DisplayTriangulation form = new DisplayTriangulation(outInfo);
                form.Show();
                dataGridView1.Columns.Clear();
                dataGridView2.Columns.Clear();
                dataGridView3.Columns.Clear();
                dataGridView1.ColumnCount = 2;
                dataGridView2.ColumnCount = 2;
                List <int> dimensions = new List <int>();
                for (int i = 0; i < outInfo.boundaryPoints.Count; i++)
                {
                    dimensions.Add(outInfo.boundaryPoints[i].Count);
                }
                int maxDim = dimensions.Max();
                dataGridView3.ColumnCount = maxDim + 1;
                for (int i = 0; i < outInfo.points.Count; i++)
                {
                    dataGridView1.Rows.Add(i, outInfo.points[i]);
                }
                for (int i = 0; i < outInfo.triangles.Count; i++)
                {
                    dataGridView2.Rows.Add(i, outInfo.triangles[i]);
                }
                for (int i = 0; i < outInfo.boundaryPoints.Count; i++)
                {
                    object[] objects = new object[maxDim + 1];
                    objects[0] = i;
                    for (int j = 0; j < outInfo.boundaryPoints[i].Count; j++)
                    {
                        objects[j + 1] = string.Format("[{0}, {1}]", outInfo.boundaryPoints[i][j][0], outInfo.boundaryPoints[i][j][1]);
                    }
                    for (int j = outInfo.boundaryPoints[i].Count; j < maxDim; j++)
                    {
                        objects[j + 1] = "";
                    }
                    dataGridView3.Rows.Add(objects);
                }
                DisplayMatrix matr = new DisplayMatrix(outInfo);
                matr.Show();
                using (StreamWriter swriter = new StreamWriter("Points.txt")) {
                    foreach (var item in outInfo.points)
                    {
                        string s1 = Convert.ToString(item.X);
                        string s2 = Convert.ToString(item.Y);
                        s1 = s1.Replace(',', '.');
                        s2 = s2.Replace(',', '.');
                        swriter.WriteLine(s1 + " " + s2);
                    }
                }
                using (StreamWriter swriter = new StreamWriter("Triangles.txt")) {
                    foreach (var item in outInfo.triangles)
                    {
                        string s1 = Convert.ToString(item.A + 1);
                        string s2 = Convert.ToString(item.B + 1);
                        string s3 = Convert.ToString(item.C + 1);
                        swriter.WriteLine(s1 + " " + s2 + " " + s3);
                    }
                }
            } catch (FormatException) {
                MessageBox.Show("Wrong input of Max Area");
            } catch (IndexOutOfRangeException) {
                MessageBox.Show("Something wrong with triangulation");
            } catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }