Пример #1
0
        private void PuntiStazionariButton_Click(object sender, EventArgs e)
        {
            Single          xv, yv;
            double          zx;
            double          zy;
            Punto           zp;
            List <Derivate> derivate = new List <Derivate>();
            Derivate        derivata;

            try
            {
                PassoX = Convert.ToSingle(PassoXTextBox.Text);
                PassoY = Convert.ToSingle(PassoYTextBox.Text);
            }
            catch
            {
                PassoX = 0;
                PassoY = 0;
            }
            int          r          = 0;
            int          c          = 0;
            List <Punto> ListaPunti = new List <Punto>();

            zValue = new List <Double>();
            string zs;
            Double zxOld = 0.0;
            Double zyOld = 0.0;

            if ((PassoX > 0) && (PassoY > 0))
            {
                for (xv = grafico.minX; xv < grafico.maxX; xv += PassoX)
                {
                    c++;
                    r = 0;
                    for (yv = grafico.minY; yv < grafico.maxY; yv += PassoY)
                    {
                        r++;
                        zs = FunzioneTextBox.Text;
                        try
                        {
                            zy = derivataParziale(zs, true, xv, yv);
                            if ((zy <= 0 && zyOld >= 0) || zy >= 0 && zyOld <= 0)
                            {
                                zx          = derivataParziale(zs, true, xv, yv);
                                derivata    = new Derivate();
                                derivata.x0 = xv;
                                derivata.y0 = yv;
                                derivata.dx = zx;
                                derivata.dy = zy;
                                derivate.Add(derivata);
                            }
                            zyOld = zy;
                        }
                        catch
                        {
                            zx = 0;
                            zy = 0;
                        }
                    }
                }
            }
            foreach (Derivate d in derivate)
            {
                if ((d.dx <= 0 && zxOld >= 0) || d.dx >= 0 && zxOld <= 0)
                {
                    zp        = new Punto();
                    zp.Colore = Color.Purple;
                    zp.x      = (float)d.x0;
                    zp.y      = (float)d.y0;
                    zp.setHeight((int)(PassoX * grafico.settore(true)) + 1);
                    zp.setWidth((int)(PassoY * grafico.settore(false)) + 1);
                    ListaPunti.Add(zp);
                }
                zxOld = d.dx;
            }
            ListaPunti.InsertRange(0, grafico.punti);
            grafico.punti = ListaPunti.ToArray();
            grafico.Repaint();
        }
Пример #2
0
        private void DisegnaButton_Click(object sender, EventArgs e)
        {
            Single       xv, yv;
            double       z;
            Expression   ex = new Expression();
            Punto        zp;
            List <Punto> ListaPunti = new List <Punto>();

            zValue = new List <Double>();
            string zs;
            Double minZ = 0.0;
            Double maxZ = 0.0;

            MinimiComboBox.Items.Clear();
            MassimiComboBox.Items.Clear();
            SellaComboBox.Items.Clear();
            if ((PassoX > 0) && (PassoY > 0))
            {
                for (xv = grafico.minX; xv < grafico.maxX; xv += PassoX)
                {
                    for (yv = grafico.minY; yv < grafico.maxY; yv += PassoY)
                    {
                        zs = FunzioneTextBox.Text;
                        try
                        {
                            zs = zs.Replace("x", xv.ToString());
                            zs = zs.Replace("y", yv.ToString());
                            z  = ex.risultato(zs);
                            zValue.Add(z);
                            zp   = new Punto();
                            zp.x = xv;
                            zp.y = yv;
                            zp.setWidth((int)(PassoX * grafico.settore(true)) + 1);
                            zp.setHeight((int)(PassoY * grafico.settore(false)) + 1);
                            zp.colore = HeighToColor(z, minZ, maxZ);
                            ListaPunti.Add(zp);
                            if ((xv == grafico.minX) && (yv == grafico.minY))
                            {
                                minZ = maxZ = z;
                            }
                            else
                            {
                                if (z < minZ)
                                {
                                    minZ = z;
                                }
                                if (z > maxZ)
                                {
                                    maxZ = z;
                                }
                            }
                        }
                        catch
                        {
                            z = 0;
                        }
                    }
                    zp = new Punto();
                }
            }

            grafico.punti = ListaPunti.ToArray();
            Double[] zArray = zValue.ToArray();
            char     t;
            int      PuntiColonna = (int)((grafico.maxY - grafico.minY) / PassoY);

            for (int i = 0; i < grafico.punti.Length; i++)
            {
                if (tendeAN(zArray[i], minZ, PassoY))
                {
                    i = i;
                }
                if (tendeAN(derivataParziale(FunzioneTextBox.Text, true, grafico.punti[i]), 0, PassoX) && tendeAN(derivataParziale(FunzioneTextBox.Text, false, grafico.punti[i]), 0, PassoY))
                {
                    grafico.punti[i].colore = Color.Purple;
                    if (Hessiano(FunzioneTextBox.Text, grafico.punti[i], out t) < 0)
                    {
                        SellaComboBox.Items.Add(grafico.punti[i].x.ToString() + "," + grafico.punti[i].y.ToString());
                    }
                    else if (t == '+')
                    {
                        MassimiComboBox.Items.Add(grafico.punti[i].x.ToString() + "," + grafico.punti[i].y.ToString());
                    }
                    else if (t == '-')
                    {
                        MinimiComboBox.Items.Add(grafico.punti[i].x.ToString() + "," + grafico.punti[i].y.ToString());
                    }
                }
                else
                {
                }
            }

            MinZTextBox.Text = minZ.ToString();
            MaxZTextBox.Text = maxZ.ToString();
            grafico.Repaint();
        }