private void InitializeLocalVariable()
        {
            DrawMode();
            GraphicFunctions.a = 0;
            GraphicFunctions.b = 10;
            GraphicFunctions.c = 0;
            GraphicFunctions.d = 10;
            GraphicFunctions.w = pictureBox1.Width;
            GraphicFunctions.h = pictureBox1.Height;

            domain = new Domain();
            ClearWindow();
            polygon       = new Polygon();
            config        = new Config();
            u             = null;
            pallette      = null;
            textBox1.Text = "";

            mode = ProgramMode.DrawMode;
            Matrix k = new Matrix(2, 2);

            k[0, 0] = 4;
            k[0, 1] = 0;
            k[1, 0] = 0;
            k[1, 1] = 3;
            model   = new Model(k, 0, 1);
        }
 private void DrawResult()
 {
     ClearWindow();
     pallette = new Pallette(u.Min(), u.Max());
     foreach (Triangle tr in domain.mesh.triangles)
     {
         GraphicFunctions.FillTriangle(g, domain.mesh.nodes[tr.IndexA], domain.mesh.nodes[tr.IndexB], domain.mesh.nodes[tr.IndexC],
                                       u[tr.IndexA], u[tr.IndexB], u[tr.IndexC], pallette);
     }
     pictureBox1.Image = btm;
 }
        private static void FillHalfTriangle(Graphics grfx, Point a, Point b, Point c, double va, double v, Pallette pallette)
        {
            if ((a.Y == b.Y) && (b.Y == c.Y))
            {
                return;
            }
            if ((a.X == b.X) && (b.X == c.X))
            {
                return;
            }

            PathGradientBrush pthGrBrush = new PathGradientBrush(new Point[] { a, b, c });


            ColorBlend colorBlend = new ColorBlend();

            if (va < v)
            {
                List <Color> l = pallette.GetColorPallette(va, v);
                l.Reverse();
                colorBlend.Colors = l.ToArray();
            }
            else
            {
                List <Color> l = pallette.GetColorPallette(v, va);
                colorBlend.Colors = l.ToArray();
            }

            colorBlend.Positions           = pallette.GetRelativaPossition();
            pthGrBrush.InterpolationColors = colorBlend;
            pthGrBrush.CenterPoint         = a;

            grfx.FillRectangle(pthGrBrush, new Rectangle(0, 0, (int)w, (int)h));
        }
        public static void FillTriangle(Graphics g, Node pa, Node pb, Node pc, double ua, double ub, double uc, Pallette pallette)
        {
            double[] v         = new double[] { ua, ub, uc };
            Node[]   p         = new Node[] { pa, pb, pc };
            int[]    indexator = new int[v.Length];
            indexator[0] = IMin(v);
            indexator[2] = IMax(v);
            indexator[1] = 3 - indexator[0] - indexator[2];

            Node   a  = p[indexator[0]];
            Node   b  = p[indexator[2]];
            Node   c  = p[indexator[1]];
            double vA = v[indexator[0]];
            double vB = v[indexator[2]];
            double vC = v[indexator[1]];
            double vD = v[indexator[1]];

            Node d = AdditionNode(v, p);

            FillHalfTriangle(g, ConvertToScreen(a), ConvertToScreen(d), ConvertToScreen(c), vA, vC, pallette);
            FillHalfTriangle(g, ConvertToScreen(b), ConvertToScreen(d), ConvertToScreen(c), vB, vC, pallette);
        }