Grafik erstellen
-
Hallo wer kann mir sagen wie ich folgenden Code so gestalten kann, dass er mir mit folgender Formel: Restschuld_am_Ende_des_Monats = Schuld_aus_Vormonat + (Schuld_aus_Vormonat * (Jahreszins/100/12) - Monatsrate)
eine Kurve ausgibt. Ich hab's schon ein paarmal probiert, aber die Kurve erscheint immer außerhalb des Formulars
Ich habe natürlich auch die Variablen und die Formel angepasst.// Declarations added here will be included at the top of the .HPP file
#include <math.h> const WDouble ERDBESCHLEUNIGUNG = 9.81; // 9.81 Meter/Sekunde im Quadrat const WDouble SCHALLGESCHW = 330.0; // 330 Meter/Sekunde class __Form1_declspec Form1 : public __Form1_Base { public: // add your public instance data here private: // add your private instance data here WInt nullX; // Nullpunkt X-Achse WInt nullY; // Nullpunkt Y-Achse WInt maxX; // hoechster x-Wert WInt maxY; // hoechster y-Wert WDouble maxMeter; // max. Meter WDouble maxSekunden; // max. Sekunden WDouble pixelProMeter; WDouble pixelProSekunde; WString strSec[20]; // Beschriftung Sekunden WString strMeter[20]; // Beschriftung Meter protected: // add your protected instance data here public: void zeichneGrafik( void ); public: WPoint setzePunkt( WDouble zeit, WDouble tiefe ); public: WDouble berechneZeit( WDouble meter ); }; // Code added here will be included at the top of the .CPP file // Include definitions for resources. #include "WRes.h" WBool Form1::Form1_Create( WObject * source, WCreateEventData * event ) { maxMeter = 110; // Hoechster Wert in Metern maxSekunden = 5.5; // Hoechste Zeit in Sekunden nullX = 40; // Nullpunkt links unten nullY = GetHeight() - 50; // in Bildschirmkoordinaten maxX = GetWidth() - 100; // Hoechste erlaubte Bilschirmkoordinaten maxY = 40; /* Mindestgröße des Fensters festlegen, so daß es nie kleiner als */ /* am Anfang werden kann. */ SetMinimumTrackingSize( WSize(GetWidth(), GetHeight()) ); /*--------- Die Einheiten Meter und Sekunden in Pixel umrechnen -------*/ pixelProMeter = ( nullY - maxY ) / maxMeter; pixelProSekunde = ( maxX - nullX ) / maxSekunden; /*-------------------------- Zeichnen der Grafik ----------------------*/ zeichneGrafik(); return FALSE; } Form1::Form1() { } Form1::~Form1() { } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Die Methode 'zeichneGrafik()' führt die grafischen Opertionen aus */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ void Form1::zeichneGrafik( void ) { WPen stiftKoordinatenKreuz; WPen stiftTeilstrich; WPen stiftKurve; WInt meter, sekunde; WDrawText * zahl; /*------------------------- Stifte festlegen --------------------------*/ stiftKoordinatenKreuz.Create( WColorBrightBlue); stiftTeilstrich.Create( WColorBlack,1,WPStyleDot ); stiftKurve.Create( WColorBrightRed, 2 ); // Stift Gitternetz /*------------------------- Koordinatenkreuz zeichnen -----------------*/ WDrawLine *linie = new WDrawLine( setzePunkt(0,0), setzePunkt(0,maxMeter)); linie->SetPen(stiftKoordinatenKreuz); AddDrawPrimitive( linie ); linie = new WDrawLine( setzePunkt(0,0), setzePunkt(maxSekunden,0)); linie->SetPen(stiftKoordinatenKreuz); AddDrawPrimitive( linie ); /*----------------------- Koordinatenkreuz beschriften ----------------*/ WDrawText *xAchse = new WDrawText( setzePunkt(5.6, 0)," Zeit in sec " ); xAchse->SetFont(GetFont()); AddDrawPrimitive( xAchse ); WDrawText *yAchse = new WDrawText( setzePunkt(-0.3,120)," Tiefe in Meter " ); yAchse->SetFont(GetFont()); AddDrawPrimitive( yAchse ); /*------------------ Zeitachse mit Sekundenwerten beschriften. --------*/ WInt i=0; for( sekunde=1; sekunde < maxSekunden; sekunde++ ) { zahl = new WDrawText((WPoint) setzePunkt(sekunde,-1), ""); strSec[i].Sprintf(" %d ", sekunde); //zahl->SetNumCharacters( strSec[i].GetLength() ); zahl->SetText(strSec[i]); zahl->SetFont(GetFont()); AddDrawPrimitive( zahl ); i++; } /*--------------- Die Tiefenachse mit Meterwerten beschriften. --------*/ i=0; for( meter=10; meter < maxMeter; meter+=10 ) { zahl = new WDrawText((WPoint) setzePunkt(-0.4, meter+2), ""); strMeter[i].Sprintf(" %d ", meter); //zahl->SetNumCharacters( strMeter[i].GetLength() ); zahl->SetText(strMeter[i]); zahl->SetFont(GetFont()); AddDrawPrimitive( zahl ); i++; } /*--------------- Teilstriche für die Sekunden einzeichnen -----------*/ for( sekunde=1; sekunde < maxSekunden; sekunde++ ) { WDrawLine *teilstrich = new WDrawLine( setzePunkt(sekunde,0), setzePunkt(sekunde,maxMeter)); teilstrich->SetPen(stiftTeilstrich); AddDrawPrimitive( teilstrich ); } /*--------------- Teilstriche für die Meter einzeichnen --------------*/ for( meter=10; meter < maxMeter; meter+=10 ) { WDrawLine *teilstrich = new WDrawLine(setzePunkt(0,meter), setzePunkt(maxSekunden,meter)); teilstrich->SetPen(stiftTeilstrich); AddDrawPrimitive( teilstrich ); } /*------------ Kurve für die Tiefe über der Wartezeit zeichnen --------*/ for( meter=0; meter < maxMeter; meter++ ) { WDouble zeit1 = berechneZeit( meter ); WDouble zeit2 = berechneZeit( meter+1 ); WDrawLine *kurve = new WDrawLine(setzePunkt(zeit1,meter), setzePunkt(zeit2,meter+1)); kurve->SetPen(stiftKurve); AddDrawPrimitive( kurve ); } SetBackColor( WColorBrightCyan ); } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Die Methode 'setzePunkt()' rechnet die übergebenen Koordinaten aus */ /* Zeit und Strecke in Bildschirmkoordinaten um und gibt diese in */ /* einem WPoint Objekt zurück */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ WPoint Form1::setzePunkt( WDouble zeit, WDouble tiefe ) { WPoint punkt; punkt.x = nullX + zeit * pixelProSekunde; // Koordinaten für die Zeit punkt.y = nullY - (tiefe * pixelProMeter); // Koordinaten für die Tiefe return punkt; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Die Methode 'berechneZeit()' ermittelt die Zeit für eine */ /* vorgegebene Tiefe */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ WDouble Form1::berechneZeit( WDouble meter ) { WDouble zeit; zeit = sqrt( 2*meter/ERDBESCHLEUNIGUNG ) + ( meter / SCHALLGESCHW ); return zeit; }/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/
-
Renate schrieb:
aber die Kurve erscheint immer außerhalb des Formulars
Wie das denn?
-
schonmal probiert! wie? jaja... wozu dann ERDBESCHLEUNIGUNG und SCHALLGESCHW bei ner finanzmathematischen formel? wo sind das für datentypen mit dem W davor?
achja, wo hastn den code geklaut?
-
Das ist kein BCB-Code, sondern Power++ . Da gibt es auch einen Thread im C++-Forum der mittlerweil nach andere GUIs verschoben ist.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-154920.html
-
WebFritzi schrieb:
Renate schrieb:
aber die Kurve erscheint immer außerhalb des Formulars
Wie das denn?
Ja das ist ja eben das Problem, hast Du eine Antwort
-
Sunday schrieb:
schonmal probiert! wie? jaja... wozu dann ERDBESCHLEUNIGUNG und SCHALLGESCHW bei ner finanzmathematischen formel? wo sind das für datentypen mit dem W davor?
achja, wo hastn den code geklaut?
Ich habe natürlich die Variablen angepaßt, aber den Code, den Du hier gesehen hast, ist die Vorlage, die ich verändern will.
-
Sunday schrieb:
schonmal probiert! wie? jaja... wozu dann ERDBESCHLEUNIGUNG und SCHALLGESCHW bei ner finanzmathematischen formel? wo sind das für datentypen mit dem W davor?
achja, wo hastn den code geklaut?
ich wusste gar nicht das man code auch klauen kann.
-
Braunstein schrieb:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-154920.html