Grafik erstellen



  • Ich brauche dringend Unterstützung bei folgendem Code:
    Die Kurve wird einfach nicht ausgegeben, warum?
    Ich weiß, dass der Code ziemmlich umfangreich ist, aber vielleicht macht sich jemand die Mühe und guckt mal!!!
    Vielen Dank

    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    /*P3_W1_13                Grafische Darstellung der Strecke, die ein   */
    /* Stein im freien Fall zurücklegt, über der vom Losassen des Steines  */
    /* bis zum Eintreffen des Schalls gemessenen Zeit                      */
    /*                                                                     */
    /*                   Lösung zur Wiederholungsaufgabe 3.1               */
    /*                                                                     */
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    
    // 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 SCHULD_AUS_VORMONAT = 100;
      //const WDouble JAHRESZINS          = 4;
      //const WDouble MONATSRATE          = 80;
    
     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 = 10000;           // Hoechster  Wert in Metern
        maxSekunden = 19.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 *teilstrich = new WDrawLine(setzePunkt(0, 0), 
     //setzePunkt(0, maxMeter));
      WDrawLine *linie = new WDrawLine( setzePunkt(0,0), setzePunkt(0,maxMeter));  
      //teilstrich->SetPen(stiftTeilstrich);
      linie->SetPen(stiftKoordinatenKreuz); 
      AddDrawPrimitive( linie );
    
      //teilstrich = new WDrawLine(setzePunkt(0, 0), setzePunkt(maxSekunden, 0));
        linie = new WDrawLine( setzePunkt(0,0), setzePunkt(maxSekunden,0)); 
      //teilstrich->SetPen(stiftTeilstrich);
      linie->SetPen(stiftKoordinatenKreuz);                           
      AddDrawPrimitive( linie );
    
    /*----------------------- Koordinatenkreuz beschriften ----------------*/
    
      WDrawText *xAchse = new WDrawText( setzePunkt(20.6, 0)," Zeit in sec " );  
      xAchse->SetFont(GetFont());
      AddDrawPrimitive( xAchse );
    
      WDrawText *yAchse = new WDrawText( setzePunkt(-0.3, 10500)," Tiefe in Meter " );  
      yAchse->SetFont(GetFont());
      AddDrawPrimitive( yAchse );
    
    /*------------------ Zeitachse mit Sekundenwerten beschriften. --------*/
      WInt i=0;
      for( sekunde=0; 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=1;
      for( meter=1000; meter < maxMeter; meter+=1000 )
      {
    	zahl = new WDrawText((WPoint) setzePunkt(-0.3, meter+2), "");
    	strMeter[i].Sprintf(" %d ", meter);
    
    	//zahl->SetNumCharacters( strMeter[10 -1].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=1000; meter < maxMeter; meter+=1000 )
      {
    	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( WColorWhite);
    }
    
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    /* 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 = SCHULD_AUS_VORMONAT + (SCHULD_AUS_VORMONAT * 
        //   (JAHRESZINS / 100 /12) - MONATSRATE);
    
    	zeit = sqrt( 2*meter/ERDBESCHLEUNIGUNG ) + ( meter / SCHALLGESCHW );
    	return zeit;
    
    }
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
    


  • Also bei mir stehen diese Funktionen der Konsole net zur verfügung 😉



  • Sieht aus wie Borland C++ Builder und VLC. Da gibts btw ein extra Subforum mit Leuten die sich Problemen wie diesem annehmen! 🙂

    grüße



  • sie verwendet Power++, und damit keinen borland.
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1046256-and-highlight-is-.html#1046256

    und auch kein standard. so long



  • schade, dass du mit dem power++ arbeiten musst.

    June 30, 1999

    We are writing to advise you that the current release of Power++ Enterprise, version 2.5, concludes Sybase's development of the Power++ product and that the Power++ product will be discontinued.

    Sybase believes that it can best serve the needs of the developer community by allocating greater resources to enhancing its leading-edge products, Sybase Enterprise Application Studio, PowerBuilder, PowerJ and Enterprise Application Server. These products enable you to rapidly develop and deploy sophisticated Web applications. With the release of Sybase Enterprise Application Studio 3.0, Sybase has delivered an integrated development environment with a scalable, secure, transaction-aware platform for Web and component-based application development.

    aus: http://www.sybase.com/detail?id=20512

    damit findest du im web sehr wenig unterstützung, weil wenige sich mit dieser bibliothek auskennen.

    vielleicht helfen hier ein paar beispielprogramme
    http://www.neatech.ch/powerpp/



  • ps:

    ich würde mir im debugmodus step by step die werte der variablen

    meter,
    maxMeter
    zeit1
    zeit2

    anschaun.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten