[gelöst] Sinuskurve unabhängig !zeichnen! in C++
-
Ja genau WinAPI benutze ich. Wäre nett wenn mich jemand verschieben könnte.
auf skalierung umrechnen it gut und schön aber woher weiß ich dann das was ich dann habe genau auch die sinuskurve ist und nicht der einzelne pixel vielleicht um 1 weiter nach rechts oder links muss.
Denn ich würde jetzt jeden einzelnen pixel zeichnen nach augenmaß, ob es dann wirklich der sinus ist weiß ich dann ja net.
-
Was redest du denn da von "Augenmaß"? Du sollst die Y-Werte ausrechnen, nicht schätzen. Machst du dir Sorgen wegen Rundungsfehlern? Die hast du sowieso, weil du die Werte in ein Pixelraster pressen musst. Das kann schon prinzipiell nicht "genau" sein. Oder willst du verhindern, dass das Bild verzerrt wird? Dann musst du einfach nur für X und Y denselben Skalierungsfaktor benutzen.
-
Dir ist bekannt, dass es sin funktionen usw gibt http://www.cplusplus.com/reference/clibrary/cmath/ und runden ist auch nicht schwer.
-
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 Zeichnenvoid 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 BezeichnerDann 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 istkann mir da jemand helfen?
-
habs heruas
wert/(900/x-achse)