zeichnen einer x² funktion??°°



  • Hi leute, ich würde gerne eine x² funktion zeichenn, die bei 150 250 anfängt.
    allerdings zeichent die folgende kurve nur so einen schmarn, der falschrum liegt. wo .liegt das problem??

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     img->Canvas->MoveTo(150,0);
     img->Canvas->LineTo(150,300);
     img->Canvas->MoveTo(0,250);
     img->Canvas->LineTo(300,250);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     img->Canvas->MoveTo(150,250);
    
    	for(int x=0; x<15 ; x++)
    	{
    	 int X = x;
    	 int Y = X*X;
    	 img->Canvas->LineTo(X,Y);
    	}
    }
    //---------------------------------------------------------------------------
    

    also, beim ersten klick, soll das kreuz gemalt werden, beim 2. button die kurve.
    wäre nett für ein paar trick oder cpp code

    greetz
    T I M
    www.tikotsammlung.de.vu



  • wie falsch rum liegt? zeig mal ein bild!



  • Hallo,

    Das liegt wohl daran, dass der Nullpunkt des Bildschirmkoordinatensystems links oben ist und y nach unten hin grösser wird, wärend du den Nullpunkt links unten haben willst mit y nach oben zunehmend. Du muss deine Koordinaten halt transformieren.

    Ciao



  • Hallo

    hab das mal korrigiert

    img->Canvas->MoveTo(150,250); // Startpunkt
     img->Canvas->Pen->Color = clRed; // Farbe setzen
     int y; // Abweichung y-Achse
     int x; // Abweichung x-Achse
    
     // Für 15 Punkte die Quadratische Kurze zeichnen
     for (int Lv = 0; Lv < 15; Lv++)
     {
    
       // Werte für x und y berechnen
       x = Lv;
       y = Lv * Lv;
    
       // Skalierung, damit die Kurve zu sehen ist. Damit kannst du
       // die Anzeige stauchen und dehnen, indem du das Verhältnis änderst
       x*= 10;
       y*= 10;
    
       img->Canvas->LineTo(150 + x, 250 - y); // Linie zum neuen Punkt zeinchnen
       }
    

    bis bald
    akari



  • akari schrieb:

    hab das mal korrigiert

    Sicher?

    y = 14 * 14 * 10 = 1960

    zumindest fuer meinen Monitor viel zu gross! 😉
    ja und ich weiss mit 1 siehts aus wie vorher!



  • Hallo

    naja, für das exponentielle Wachstum der Kurve kann ich ja nichts.
    Wenn das zu schnell wächst, muß eben das Verhältniss geändert werden

    x*= 10;
       y*= 2;
    

    sieht ganz gut aus. Ist aber dann eben gestaucht. Deshalb sollte dann eine Anzeige der x- und y- Schritte zusätzlich zu dem Kreuz mit rein.

    bis bald
    akari



  • noch besser siehts natürlich so aus:

    img->Canvas->MoveTo(-1,-1); // Startpunkt
     img->Canvas->Pen->Color = clRed; // Farbe setzen
     float y; // Abweichung y-Achse
     float x; // Abweichung x-Achse
    
     // Für 15 Punkte die Quadratische Kurze zeichnen
     for (float Lv = -15; Lv < 15; Lv+=.1)
     {
    
       // Werte für x und y berechnen
       x = Lv;
       y = Lv * Lv;
    
       // Skalierung, damit die Kurve zu sehen ist. Damit kannst du
       // die Anzeige stauchen und dehnen, indem du das Verhältnis änderst
       x*= 10;
       y*= 2;  // 10 wenn es nicht gestaucht werden soll
    
       img->Canvas->LineTo(150 + x, 250 - y); // Linie zum neuen Punkt zeinchnen
       }
    

    😉


Anmelden zum Antworten