[gelöst] Sinuskurve unabhängig !zeichnen! in C++



  • Nein war mir nicht bekannt, aber jetzt versteh ich esschon eher. Was ich mich nun frage ist,
    wenn ich laut der beispielrechnung dort für 30 grad einen sinus von 0,5 bekomme, wo muss dann diese 0,5 hin auf die x-achse oder y-achse und wie errechne ich den dazugehörigen fehlenden wert.



  • na, auf welche achse willst du dir grad machen?



  • Darkangel1208 schrieb:

    wenn ich laut der beispielrechnung dort für 30 grad einen sinus von 0,5 bekomme, wo muss dann diese 0,5 hin auf die x-achse oder y-achse und wie errechne ich den dazugehörigen fehlenden wert.

    30 Grad auf die X-Achse, 0,5 auf die Y-Achse. Von welchem "fehlenden Wert" sprichst du?

    Du musst noch beachten, dass die sin-Funktion aus <cmath> ihr Argument (Winkel) in Bogenmaß erwartet, nicht in Grad.

    P.S.:
    Kann es sein, dass dir ein paar mathematische Grundlagen fehlen?



  • na ich würde jetzt mal denken auf die x-achse. vielleicht hilft es ja wenn ich mal den code poste....

    bei mri kommt obwohl ich die math.h eingefügt habe die meldung
    error C2065: 'sin' : nichtdeklarierter Bezeichner

    //Achtung hier beginnt der Bereich zum Zeichnen
    
    						double a=0,i=0;
    
    						COLORREF schwarz, rot, blau;
    						schwarz = RGB(0,0,0);
    						rot = RGB(255,0,0);
    						blau = RGB(0,0,255);
    
    						void senkrecht(HDC,double, double, double, COLORREF), waagerecht(HDC,double, double, double, COLORREF);
    						double sinus(HDC,int, COLORREF);
    
    						for (i=0;i<=360;i=i+40)
    						{
    							senkrecht(hDC,i,0,300,rot);
    						}
    
    						senkrecht(hDC,200,0,300,schwarz);
    
    						for (i=0;i<=225;i=i+75)
    						{
    							waagerecht(hDC,0,i,400,schwarz);
    						}
    
    						for (i=37.5;i<=300;i=i+75)
    						{
    							waagerecht(hDC,0,i,400,rot);
    						}
    
    						for (i=7.5;i<=300;i=i+7.5)
    						{
    							waagerecht(hDC,195,i,10,schwarz);
    						}
    
    						for (a=70;a<=220;a=a+75)
    						{
    							for (i=8;i<=400;i=i+8)
    							{
    								senkrecht(hDC,i,a,10,schwarz);
    							}
    						}
    
    						sinus(hDC,30,blau);
    
    					//Achtung hier endet der Bereich zum Zeichnen
    
    void senkrecht(HDC hdc, double x, double ys, double ye, COLORREF farbe)
    {
    	int i;
    
    	for(i=0;i<ye;i++)
    	{
    		SetPixel(hdc,x,ys+i,farbe);
    	}
    }
    
    void waagerecht(HDC hdc, double x, double ys, double ye, COLORREF farbe)
    {
    	int i;
    
    	for(i=0;i<ye;i++)
    	{
    		SetPixel(hdc,x+i,ys,farbe);
    	}
    }
    
    double sinus(HDC hdc, int x, COLORREF farbe)			
    {
    
    	double result;
    	result = sin (x*3.14159265/180);
    	return result;
    
    }
    


  • Du hast nicht zufällig die Include-Direktive für <math.h> (eigentlich sollst du <cmath> benutzen) vor die für stdafx.h geschrieben?

    Im Übrigen wäre es wohl gut, wenn du mit dem Resultat auch irgendetwas machen würdest.



  • Darkangel1208 schrieb:

    bei mri kommt obwohl ich die math.h eingefügt habe die meldung
    error C2065: 'sin' : nichtdeklarierter Bezeichner

    Dann hast du das include an der falschen stelle/datei eingefügt.



  • Wie in der mathematik das mit dem Taschenrechner geht weiß ich ja eintippen fertig. ^^' Da weiß ich dann aber nicht wie jetzt das, was ich ausgerechnet habe, optisch aussieht. ^^''

    ich kann es schreiben wie ich will

    #include "stdafx.h"
    #include <cmath>

    oder

    #include "cmath"

    es kommt immernoch der gleiche fehler



  • Wenn du <cmath> verwendest, musst du std::sin benutzen, weil die Funktion in diesem namespace liegt. Alternativ kannst du eine using-Deklaration oder -Direktive benutzen.

    Wenn das immer noch nicht klappt, dann zeig mal ein vollständiges Minimalbeispiel, das den Fehler reproduziert.



  • hmm

    klassen hatten wir noch nicht. wir sollen erstmal funktionen erlernen.

    problem gefunden. war ich blöd. brett wo *biste*

    mal sehen obs jetzt läuft(wenns fertig ist(ausgabe))



  • die grad-werte kann ich so übernehmen, das ist kein problem.
    aber die sinudwerte die rauskommen von max. +1 bis -1 machen mir probleme

    +1 müsste zu 180 werden und -1 zu 540 (0 wäre 360). aber wie stelle ich das an. ich komme hinter keine formel



  • Darkangel120 schrieb:

    +1 müsste zu 180 werden und -1 zu 540 (0 wäre 360). aber wie stelle ich das an. ich komme hinter keine formel

    (2 - wert) * 180



  • (wert+2) * 180

    ist invertiert (gespiegelt oder wie man sagt)

    ich finde es nur lol das uns er Lehere sagt wie solln den Sinus zeichnen und er hat selber auf dem blatt aber eine zeichnung mit dem invertierten sinus. Lehrer halt

    anstatt
    (2 - wert) * 180
    kann ich aber auch schreiben
    (2 - wert) * (y-achse/4)
    dann kann ich die fenstergröße ändern und es passt immer.

    aber was mach ich bei der x-achse.

    wert(x-achse/x-achse)* (ich weiß ist das gleiche wie 1) passt, ändere ich die fensterbreite aber von 900 auf 450 dann müsste ich
    [b]wert*(x-achse/x-achse)ändern, aber ich suche ja ne allgemeine formel, damit es immer gleich aussieht, egal wie groß das Fenster ist

    kann mir da jemand helfen?



  • habs heruas

    wert/(900/x-achse)


Anmelden zum Antworten