Parabel zeichnen + nullstelle ?



  • Mis2com schrieb:

    Dass ich statt b*(-1) b-2*b schreibe, ist ja wohl klar.

    Was bitte?



  • Hier hast du mal eine erste Version von einem eigenen Programm von mir,
    dass dir Graphen von beliebigen Funktionen zeichnet:
    http://www.aoeketec.de/projects/downloads/mgraphs.zip (184KB)
    Bedienung ist recht leicht:
    Erst die Anzahl der zu zeichnenden Graphen eintragen, und dann fuer jeden
    Graphen die Funktionsgleichung und die Anzahl der Linien, die pro Einheit beim
    Zeichnen verwendet werden (einfach rumprobieren.. Standard ist 10 ), dann
    Fenstermasse, Vollbild oder nicht und fertig... 😉

    Die Syntax fuer die Gleichungen ist leicht:

    [b]Beispiele:[/b]
    f(x) = y = 5x+5
    f(x) = y = x^2
    f(x) = y = 3x^2+5x+4
    

    Klammern und solches Schnickschnack-Zeugs erkennt er noch nicht...

    Der relevante Part des Codes dazu sieht so aus:

    /////////////////////////////////////////////////////////////////////////////
    // GetStrings                                                              //
    /////////////////////////////////////////////////////////////////////////////
    int GetStrings()
    {
    	cout << "Anzahl der zu zeichnenden Graphen: ";
    	cin >> g_NumOfGraphs;
    
    	g_Graphs = new SGraph[g_NumOfGraphs];
    
    	for( int a = 0; a < g_NumOfGraphs; a++ )
    	{
    		cout << "\n" << a+1 << ". Funktionsgleichung: f(x) = y = ";
    		cin >> g_Graphs[a].Str;
    
    		cout << a+1 << ". Linien je Einheit: ";
    		cin >> g_Graphs[a].LinPerUnit;
    	}
    
    	return 0;
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // DrawGraphs                                                              //
    /////////////////////////////////////////////////////////////////////////////
    int DrawGraphs()
    {
    	AT_CMathParser	Parser;
    	for( int a = 0; a < g_NumOfGraphs; a++ )
    	{
    		SGraph g = g_Graphs[a];
    		Parser.SetString( g.Str );
    
    		glColor3f( 0.0f, 0.0f, 1.0f );
    		glBegin( GL_LINE_STRIP );
    
    			for(	GLfloat x = ( GLfloat )-g_WinWid/100 + 1/g.LinPerUnit;
    					x < g_WinWid/100;
    					x += ( GLfloat )1/g.LinPerUnit	)
    			{
    				GLfloat y = Parser.Parse( x );
    				if( y < g_WinHei/100 && y > -g_WinHei/100 )
    				{
    					glVertex2f( x, y );
    				}
    			}
    
    		glEnd();
    	}
    	return 0;
    }
    

    MfG Aoeke



  • WebFritzi schrieb:

    Mis2com schrieb:

    Dass ich statt b*(-1) b-2*b schreibe, ist ja wohl klar. 😉

    Was bitte?

    b*-1 = b-2*b 🙂

    EDIT:
    Und falls du meinst:,,Wie bitte? So machst du das?'', dann habe ich dich gut reingelegt, ich habe da doch extra den Smiley postiert, naja ein Zwinkern war wohl nicht aussagekräftig genug. 😃

    MfG Eisflamme



  • Danke, verstehe.



  • @Aoeke
    Kannst du mal den ganzen quellcdoe posten, weil ich würde die draw graph funktion gerne irgendwie probieren mit meinem script zu verbinden 🙂
    //Edit:
    argh oder kannst du sagen wie du z.b. aus f(x)=10x^2+3x+5 a b und c bekommst?



  • Wini schrieb:

    @Aoeke
    Kannst du mal den ganzen quellcdoe posten, weil ich würde die draw graph funktion gerne irgendwie probieren mit meinem script zu verbinden 🙂
    //Edit:
    argh oder kannst du sagen wie du z.b. aus f(x)=10x^2+3x+5 a b und c bekommst?

    a = 10 b = 3 c = 5

    Oder meintest du, wie man im programmiertechnischen Sinne den String parst?

    MfG Eisflamme



  • jo programmiertechnischen Sinne 😃
    das andere ist klar 😉



  • Schau dir std::string::substr und std::string::find an



  • jo thx werd ich machen 😃



  • Also die komplette Funktion aus meinem Parser kann ich nicht posten.. Die
    ist ziemlich lang.. Aber ich koennte dir die klasse evtl. schicken.. oder habe
    geduld, bis ich sie bei mir online stelle.. 😃 Aber das dauert wohl noch...
    Hab momentan wenig Zeit zum proggen und zum weitermachen.. 🙄
    MfG Aoeke


Anmelden zum Antworten