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(); }
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(); }