Laden...
V
VolkPT
myCSharp.de - Member
0
Themen
4
Beiträge
Letzte Aktivität
vor 11 Monaten
Dabei seit
29.09.2023
Erstellt vor 11 Monaten

Hallo Th69,

vielen Dank für die Lösung.

Ich habe den Code Root-Methode (Zeile 88) noch ein wenig erweitert.

Die Abfrage y = gerade oder ungerade habe ich noch eingefügt, da sonst gerade Wurzeln aus negativen Zahlen berechnet wurden.

MfG VolkPt

 static double Root(double x, double y)
 {
     if ((x < 0) & (y % 2 != 0))

     return -Math.Pow(-x, (double) 1 / y);
     else
     return Math.Pow(x, (double) 1 / y);

 }
Erstellt vor 11 Monaten

Zitat von VolkPT

Erstellt vor einem Jahr

Hallo Th69,

vielen Dank für die schnelle Antwort.

Alles richtig, was du schreibst.

Aber ich suche für mein Mathe-Graph eine Lösung für den Sonderfall „ungerade Wurzel aus negativer Zahl“

f(x) = x^(1/3) für X = -10 ... X = +10    Beispiel: i x = -8   f(x) = -8^(1/3) = -2

Da jeder Taschenrechner heute diese Aufgabe lösen kann,
hoffte ich, dass ein Math Parser solche Funktionen auch erkennt.
(siehe: GeoGebra Grafikrechner)

Die Idee für mein Mathe-Graph entspringt deinem Graph-Programm (Graph.zip).

Da ich keine Programmiererfahrung habe, ist mein C#-Programm eine Sammlung aus Fachbüchern, deinem Graph.zip-Programm und aus verschiedenen Internet-Beispielen.

Da dieser Code zum Teil im Netz veröffentlicht wurde, hoffe ich kein Copyright verletzt zu haben.

Code für Kurve berechnen und zeichnen:


        void CanvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
 {
     SKSurface surface = e.Surface;
     SKCanvas canvas = surface.Canvas;
     if (z >= 1)
     {
         eingabe.Text = " ";
         canvas.Clear();
         canvas.DrawColor(SKColors.Transparent);
     }
     int width = e.Info.Width;
     int height = e.Info.Height;
     try
     {
         sFct = eingabe.Text;
         string sOptFct = eval.ToString();
         eval.Parse(fp, sFct);
     }
     catch (Exception)
     {
         return;
     }
     x0 = (int)(Xmin * width / (Xmin - Xmax));
     y0 = height - (int)(Ymin * height / (Ymin - Ymax));
     xx = (Xmax - Xmin) / width / tb;
     x1 = (float)x0;
     y1 = (float)y0;
     SKPoint p = new SKPoint(x1, y1);
     canvas.DrawPoint(p, FillPaint3);
     for (x = Xmax; x >= Xmin; x -= xx)
     {
         if (eingabe.Text == " ")
         { Loeschen_Clicked(sender, e); }
         try
         {
              y = eval.Evaluate(x);
              if (!Double.IsNaN(y)) { y = (float)y; }
              }
             catch (Exception)
             {
                 DisplayAlert("Achtung!", "Eingabefehler", "OK");
                 return;
             }   
         {
             if (y > 0.0 | y < 0.0)
             {
                 x1 = x0 + (int)(x * width / (Xmax - Xmin));
                 y1 = y0 - (int)(y * height / (Ymax - Ymin));
             }
             SKPoint p1 = new SKPoint(x1, y1);
             canvas.DrawPoint(p1, FillPaint3);
         }
         canvas.Save();
     }
 }
Erstellt vor einem Jahr

Hallo Th69,

ich bin kein Programmierer, nur ein Großvater (82), der für seine Enkel einen einfachen Math Graph in C# geschrieben hat.

Läuft auch alles sehr gut.

Nur bei Eingabe der Funktion f(x) = x^(1/3) oder f(x) = x#3 berechnet er nur die positiven 
x-Werte und zeichnet auch nur die Kurve für die positiven x-Werte.

Kann an dem Math Parser noch etwas geändert werden oder lieg das Problem bei C# und dem 
Pow-Befehl?

MfG Volker