Funktion grafisch darstellen
-
Es kommen bei mir die folgenden Errors:
C2065: 'MoveTo' : nichtdeklarierter Bezeichner
C2660: 'LineTo' : Funktion akzeptiert keine 1 Parameter
Muss ich was includieren?????P.S.: Ich habe eine Dialoganwendung unter VS .net und habe die Function OnDrawItem benutzt.
-
Oh habe ich vergessen.
MoveTo und LineTo sind Methoden von CDC du musst sie also über einen Pointer auf einen Grätekontext aufrufen.
In OnDraw ist das z.B.:pDC->LineTo(CPoint);Der zweite Fehler dürfte eigentlich nicht kommen aber probiers mal mit
pDC->LineTo(CPoint.x, CPoint.y);Diese Funktion ist nämlich Überladen und braucht entweder ein CPoint Objekt oder die x und y Werte.
-
Jetzt kommt kein Error mer aber es wird nichts gezeichnet. Ich habe, wie isch schon sagte, eine Dialoganwendung unter VS .net und habe die Funktion OnDrawItem benutzt.
-
Achso eine Dialoganwendung.
Ich dachte du hast eine SDI/MDI.
Müsste trotzdem klappen.
Schreib es in OnPaint().
-
Es kommt folgender Error:
[http://members.vol.at/captainiglo/Error.jpg](http://<a href=)">http://members.vol.at/captainiglo/Error.jpgBeim Debuggen zeigt der Pfeil auf LineTo().
Habe Folgenden Code:
i = 1; m_pGraph[0].x = 135; m_pGraph[0].y = -310; int x = 135, y = -310; double a; a = 240/n; GetDlgItemText(IDC_KT, m_strKT); m_dKT = atof(m_strKT); do { m_pGraph[i].x = x + (i*a); m_dKT = m_dKT - ((m_dKT - m_dZT) * m_dD) / 100; m_pGraph[i].y = y + m_dKT; i++; } while(i < n && m_dKT > m_dZT); for (int i = 1; i < n; i++) { pDC->MoveTo(m_pGraph[i-1]); pDC->LineTo(m_pGraph[i]); //Hierher zeigt der Pfeil beim debuggen }Weiß jemand was falsch ist?????
[ Dieser Beitrag wurde am 30.09.2002 um 20:42 Uhr von Fink Christoph editiert. ]
-
Hi!
Schau mal ob du einen Fence Post Error (Arrayübertretung)hast!? Dann kommt glob i meistens a read error.mfg

[ Dieser Beitrag wurde am 30.09.2002 um 21:34 Uhr von *mike* editiert. ]
-
Wenn du damit meinst das ich z.B. in das Array Array[10] etwas in Array[11] schreiben will, dann ist das nicht der Fall. Das Array wird meistens nur bis zur Hälfte gefüllt und maximal bis zur letzten stelle.
-
Ich hab mal nen kleinen Billigplotter online gestellt:
http://mitglied.lycos.de/dsdeus/PlotterDBA.zip
Der kann nur Funktionen der Form a*x^m+b*x+c zeichnen.
Die Funktion, die du als Bsp angegeben hast, wäre dann also 1*x^2+0*x+(-2)Edit:
'g' vergessen
[ Dieser Beitrag wurde am 30.09.2002 um 22:12 Uhr von dEUs editiert. ]
-
@dEUs:
Das ist genau das was ich suche.
Allerdings checke ich deinen Code überhaupt nicht
.
Könntest du mir nicht den Teil wo du mit der berechneten Koordinate die Linie zeichnest mit ein paar Erklärungen posten
????
Danke im Voraus.mfg
Fink Christoph
-
Äh ... Der Code ist schon uralt, mal schauen, ob ich den überhaupt noch kapier

//Zeichnung des eigentlichen Funktionsschaubildes... for(i = -1;i<2;i+=2) { int nFirst = 1; double Y=0.0; dc.MoveTo(POS_REL_TO_CENTER(0,C*FAKTOR)); for(double X=0.0;;X+=i*(1.0/100.0)) { //Das ist im Grunde die wichtige Zeile: Y=A*pow(X,nExp)+B*X+C; //Sie berechnet den Y-Achsenabschnitt für die angegebene Formel //Der Rest ist eigentlich nur zum zeichnen und um Grenzwerte wie "Unendlich" rauszufiltern ... //Spiel halt mal eine wenig mit dem Code rum, dann wirst schon sehen, was das alles bringt ;) //Weiss es ehrlich gesagt im Moment auch net mehr so genau .. if((!rct.PtInRect(CPoint((X*FAKTOR)+CENTER_X,(Y*FAKTOR)+CENTER_Y)))||(Y>INT_MAX||Y<INT_MIN)) { if(nExp>=0||(nExp<0&&!nFirst)) { if(_finite(Y)) dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR)); break; } else continue; } if(X<0 && ((int)nExp!=nExp)) continue; if(X == 0 && (nExp<0)) continue; int n = Y; if(nFirst) { if(nFirst==2) nFirst=0; else nFirst = 2; double X2 = X-i*(1.0/100.0); double Y2=A*pow(X2,nExp)+B*X2+C; if(_finite(Y2)) { dc.MoveTo(POS_REL_TO_CENTER(X2*FAKTOR,Y2*FAKTOR)); dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR)); } else dc.MoveTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR)); } else dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR)); } }