Exemple #1
0
        void drawMesh(Graphics e)
        {
            if (meshs != null)
            {
                foreach (var mesh in meshs)
                {
                    ArithmMeanGrade crit = new ArithmMeanGrade();
                    Gradient        st   = new Gradient();

                    for (int i = 0; i < mesh.Y - 1; i++)
                    {
                        for (int j = 0; j < mesh.X - 1; j++)
                        {
                            // st.GetCellColor(crit.Calculate(mesh));
                            System.Drawing.Point[] littlemesh = new System.Drawing.Point[4];
                            littlemesh[0] = new System.Drawing.Point((int)(mesh[i, j].X), (int)(mesh[i, j].Y));
                            littlemesh[1] = new System.Drawing.Point((int)(mesh[i + 1, j].X), (int)(mesh[i + 1, j].Y));
                            littlemesh[2] = new System.Drawing.Point((int)(mesh[i + 1, j + 1].X), (int)(mesh[i + 1, j + 1].Y));
                            littlemesh[3] = new System.Drawing.Point((int)(mesh[i, j + 1].X), (int)(mesh[i, j + 1].Y));


                            Geometry.Point[,] littlemesh2 = new Geometry.Point[2, 2];
                            littlemesh2[0, 0]             = new Geometry.Point((int)(mesh[i, j].X), (int)(mesh[i, j].Y));
                            littlemesh2[0, 1]             = new Geometry.Point((int)(mesh[i + 1, j].X), (int)(mesh[i + 1, j].Y));
                            littlemesh2[1, 0]             = new Geometry.Point((int)(mesh[i, j + 1].X), (int)(mesh[i, j + 1].Y));
                            littlemesh2[1, 1]             = new Geometry.Point((int)(mesh[i + 1, j + 1].X), (int)(mesh[i + 1, j + 1].Y));



                            int       cols  = 2;
                            int       rows  = 2;
                            RegMesh2D mesh2 = new RegMesh2D(littlemesh2, cols, rows);
                            Brush     br    = new SolidBrush(st.GetCellColor(crit.Calculate(mesh2)));

                            e.FillPolygon(br, littlemesh);
                        }
                    }
                    for (int i = 0; i < mesh.Y; i++)
                    {
                        for (int j = 0; j < mesh.X; j++)
                        {
                            if (j != mesh.X - 1)
                            {
                                e.DrawLine(new Pen(Color.Black),
                                           (int)mesh[i, j].X, (int)mesh[i, j].Y,
                                           (int)mesh[i, j + 1].X, (int)mesh[i, j + 1].Y);
                            }
                            if (i != mesh.Y - 1)
                            {
                                e.DrawLine(new Pen(Color.Black),
                                           (int)mesh[i, j].X, (int)mesh[i, j].Y,
                                           (int)mesh[i + 1, j].X, (int)mesh[i + 1, j].Y);
                            }
                        }
                    }
                }
                meshs = null;
            }
        }
Exemple #2
0
        private void Build_Click(object sender, EventArgs e)
        {
            Contour contour = new Contour(curves);

            if (contour.Size < 3 || contour.Size > 5)
            {
                return;
            }
            if (contour.Size == 5)
            {
                if (decompositor == null)
                {
                    decompositor = new PentagonTriangleDecompose();
                }
                IContour[] contourTEST;
                meshs = new List <RegMesh2D>();
                IMeshGen generator;                             // = new TriaMeshGen(10, 10);
                contourTEST = decompositor.decomposed(contour); //тестовый код для пятиугольника
                foreach (var x in contourTEST)
                {
                    if (x.Size == 4)
                    {
                        generator = new QuadCleverMeshGen(10);
                        meshs.AddRange(generator.Generate(x));
                    }
                    if (x.Size == 3)
                    {
                        generator = new TriaMeshGen(10);
                        meshs.AddRange(generator.Generate(x));
                    }
                }
            }
            if (contour.Size == 4)
            {
                //IMeshGen generator = new QuadSimpleMeshGen(10, 10);
                IMeshGen generator = new QuadCleverMeshGen(10);
                //IMeshGen generator = new TriaMeshGen(10, 10);
                meshs = new List <RegMesh2D>();
                meshs.Add(generator.Generate(contour)[0]);
            }
            if (contour.Size == 3)
            {
                meshs = new List <RegMesh2D>();
                IMeshGen generator = new TriaMeshGen(10);
                meshs = generator.Generate(contour);
            }
            double qualitySum = 0;

            for (int i = 0; i < meshs.Count(); i++)
            {
                qualitySum += quality.Calculate(meshs[i]);
            }
            Quality.Text = Convert.ToString(qualitySum / meshs.Count());
            Refresh();
        }
Exemple #3
0
        public void CalculateTest()
        {
            ArithmMeanGrade target = new ArithmMeanGrade(); // TODO: инициализация подходящего значения

            int row = 4;
            int col = 4;

            IPoint[,] setka = new IPoint[row, col];
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    setka[i, j] = new Point(i + 1, j + 1);
                }
            }

            RegMesh2D mesh     = new RegMesh2D(setka, 4, 4); // TODO: инициализация подходящего значения
            double    expected = 1;                          // TODO: инициализация подходящего значения
            double    actual;

            actual = target.Calculate(mesh);
            Assert.AreEqual(expected, actual);
            // Assert.Inconclusive("Проверьте правильность этого метода теста.");
        }