Funktion Zeichnen
-
Ich würde gerne ein Diagramm von einer Funktion 3 grades ausgeben lassen,
leider klappt das aber nicht wie ich mir da vorgestellt habe.Weiß einer eine bessere Lösung?
Einlesen der koordinaten:
int i=0; double ende=50; double j; for(j=-50;j<=ende;j=j+1) { Koordinaten.xKo[i]=j; Koordinaten.yKo[i]=(Daten.zahl[0]*pow(j,3))+(Daten.zahl[1]*pow(j,2))+(Daten.zahl[2]*j)+Daten.zahl[3]; i++; } Koordinaten.anzahl=i; goto sprungmarke_zwei;
Das Zeichnen der Koordinaten:
sprungmarke_zwei: HDC hdcPaint, hdcBitmap; PAINTSTRUCT ps; hdcPaint = BeginPaint(hWnd2, &ps); { //hdcBitmap = CreateCompatibleDC(hdcPaint); //SelectObject (hdcBitmap, hBitmap); //StretchBlt(hdcPaint, 0, 0, 600, 600, hdcBitmap, 0, 0, 600, 600, SRCCOPY); for(int i=0;i<=Koordinaten.anzahl;i++) { SetPixel(hdcPaint,(long int)Koordinaten.xKo,(long int)Koordinaten.yKo,RGB(255,0,0)); } } EndPaint(hWnd2, &ps);
-
Was klappt nicht - die Berechnung oder die Darstellung? Ich könnte mir vorstellen, statt einzelne Pixels zu setzen controls zu verwenden, die mit einer Hintergrundfarbe gefüllt werden.
-
das zeichnen klappt nicht.
was genau meinst du mit controlls
-
Controls sind Steuerelemente wie editbox, listbox etc., die üblicherweise in einer Resourcendatei definiert werden. Mein Vorschlag ist aber nicht so gut, da wohl in der Handhabung zu kompliziert. Siehe mal in der WinApi-Beschreibung nach, was es alles mit Rechtecken (rectangle) anzufangen gibt. Irgendetwas ist da bestimmt dabei.
-
hab mir deinen code nicht so genau angesehen. dein problem könnte sein, das du zuviel platz zwischen den punkten hast ?
da musst du ne linie zwischen malen.
-
Hallo.
Malen unter Win32 ist 'ne Seuche. Wie wär's mit OpenGL? Die GLAux solltest du neu schreiben, aber ansonsten ist das echt gut (für 24 Bit-DIBs). OpenGL kann auch Splines.
Gruß
Lars
-
Ich würde das anders machen - mit LineTo(...), hier ein Beispiel:
int iStart[2] = {220, 235}; int iPixelPerStep = 20; MoveToEx(hdc, int(iStart[0]+iPixelPerStep*(-10)), int(iStart[1]-iPixelPerStep*sin(-10)), 0); for (double x=-10.0; x<=10.0; x=x+0.01) { int iY = int(iStart[1]-iPixelPerStep*sin(x)); LineTo(hdc, int(iStart[0]+iPixelPerStep*x), iY); }
Das Beispiel zeichnet eine Sinuskurve, Grenzen sind -10 und 10. Müsstest du halt nur entsprechend anpassen.. ich habe mich damals dämlich gesucht auf der Suche nach Libraries etc., die Funktionsgraphen darstellen können. Verzichte lieber auf so etwas und erstell dir deine eigenen Funktionen, zum Beispiel zum Zeichnen der X -und Y Achse, etc. Ist nicht so schwer, wenn man einmal durchblickt
-
Hi,
ich muss jetzt so etwas ähnliches machen,
dabei ist meine Idee eher kleine (variierbare) Vierecke oder Dreiecke zu Zeichnen, verbindungslinien sollten da auch eher optional sein.
Weiter sollten die Zeichenachsen skalierbar, und unter anderem auch Logarithmisch darstellbar sein, leider habe ich nur diese vorstellung, aber noch keine algorithmische idee zum Zeichnen,..OpenGL ist zwar nett, aber aufgrund der benötigten Zeichengeschwindigkeit von gerade mal 5frames pro sek ein bissl überdimensioniert?!
jemand ne idee??
gruß
-
crazychicken schrieb:
for (double x=-10.0; x<=10.0; x=x+0.01)...
gefählich.
mach keine schleifen mit fließkommazahlen als laufvariable nichtabbrechenden binärbrüchen als schrittweite.machen zum beispiel so:
for (double i=-1000;i<=1000;++i) { double x=i/100; ... }