Generator.cpp

gehe zur Dokumentation dieser Datei
00001 
00006 #include "Generator.h"
00007 
00008 
00015 Generator::Generator(){
00016         clear();
00017         spur_ = 0;
00018 }
00019 
00020 
00030 Generator::Generator( Spur* spur, long int id ){
00031         clear();
00032         spur_ = spur;
00033         idBenutzer_ = id;
00034 }
00035 
00042 void Generator::clear(){
00043         letzteErstellungszeit_ = 0;
00044         aktuelleAnzahlFahrzeuge_ = 0;
00045         anzahlFahrzeuge_ = 0;
00046         loescheMich_ = 0;
00047         zufallsFlag_ = 1;
00048         idBenutzer_ = 0;
00049         
00050         fahrzeugTyp_ = 2;
00051         fahrzeugBeschleunigungPositiv_ = 3;
00052         fahrzeugBeschleunigungNegativ_ = 7.5;
00053         fahrzeugLebensdauer_ = -1;
00054         fahrzeugLaenge_ = 3.5;
00055         fahrzeugHoechstgeschwindigkeit_ = 200;
00056         fahrzeugFahrtenbuch_ = 0;
00057         fahrzeugAnzahlWegpunkte_ = 0;
00058 }
00059 
00069 void Generator::takt(double zeitintervall){
00070         letzteErstellungszeit_ = letzteErstellungszeit_ + zeitintervall;
00071         if( letzteErstellungszeit_ < taktZeit_ ){
00072                 // tue nichts .. nur die Zeit zaehlen
00073         }
00074         else{
00075                 if( aktuelleAnzahlFahrzeuge_ >= anzahlFahrzeuge_ ){
00076                         loescheMich_ = 1;
00077                         return;
00078                 }
00079                 // erstelle ein Fahrzeug und setze díe Zeit auf 0
00080                 if( zufallsFlag_ == 1 ){
00081                         zufall();
00082                 }
00083                 try{
00084                         erstelleFahrzeug();
00085                 }
00086                 catch( Fehler *fehler ){
00087                         throw( fehler );
00088                 }
00089                 letzteErstellungszeit_ = 0;
00090                 aktuelleAnzahlFahrzeuge_ ++;
00091         }
00092 }
00093 
00100 void Generator::aufraeumen(){
00101 }
00102 
00103 
00115 int Generator::zufallszahl( int minimum, int maximum ){
00116         srand((unsigned)time(NULL));
00117         int zahl(0);
00118 
00119         if( minimum >= maximum ){
00120                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDer Zufallsgenerator kann nur mit einem Minimum kleiner als dem Maximum einen sinnvolen Wert ermitteln.");
00121                 throw(fehler);
00122         }
00123 
00124         do{
00125                 zahl = rand()%(maximum+1-minimum);
00126                 zahl += minimum;
00127         }while( zahl < minimum || zahl > maximum );
00128 
00129         return zahl;
00130 }
00131 
00140 void Generator::wegpunktHinzufuegen( int richtung ){
00141         int *tmp(0);
00142         int i(0);
00143         // wenn es der erste Punkt ist
00144         if( fahrzeugFahrtenbuch_ == 0 ){
00145                 fahrzeugFahrtenbuch_ = new int[1];
00146                 fahrzeugFahrtenbuch_[0] = richtung;
00147                 fahrzeugAnzahlWegpunkte_ = 1;
00148         }
00149         // sonst muessen die Wegpunkte neu sortiert werden
00150         else{
00151                 tmp = fahrzeugFahrtenbuch_;
00152                 fahrzeugFahrtenbuch_ = 0;
00153                 // neues Array anlegen, welches um eine Einheit groesser ist
00154                 fahrzeugFahrtenbuch_ = new int[(fahrzeugAnzahlWegpunkte_+1)];
00155                 // die vorhandenen Eintraege hinueberkopieren
00156                 for( i = 0; i < fahrzeugAnzahlWegpunkte_; i++ ){
00157                         fahrzeugFahrtenbuch_[i] = tmp[i];
00158                 }
00159                 // den neuen Eintrag hunzufuegen
00160                 fahrzeugAnzahlWegpunkte_++;
00161                 fahrzeugFahrtenbuch_[fahrzeugAnzahlWegpunkte_-1] = richtung;
00162                 // das alte Fahrtenbuch loeschen
00163                 delete tmp;
00164         }
00165 }
00166 
00175 void Generator::setzeAnzahlFahrzeuge(int anzahl){
00176         anzahlFahrzeuge_ = anzahl;
00177         aktuelleAnzahlFahrzeuge_ = 0;
00178 }
00179 
00195 void Generator::setzeFahrzeugeigenschaften(int typ, double beschleunigungPositiv, double beschleunigungNegativ, int lebensdauer, double laenge, Koordinaten farbe, double hoechstgeschwindigkeit ){
00196         if( typ < 1 || typ > 4 ){
00197                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDer Typ fuer Fahrzeuge in einem Generator entspricht nicht den geforderten Parametern.");
00198                 throw(fehler);
00199         }
00200         fahrzeugTyp_ = typ;
00201         fahrzeugBeschleunigungPositiv_ = beschleunigungPositiv;
00202         fahrzeugBeschleunigungNegativ_ = beschleunigungNegativ;
00203         fahrzeugLebensdauer_ = lebensdauer;
00204         fahrzeugFarbe_ = farbe;
00205         fahrzeugLaenge_ = laenge;
00206         fahrzeugHoechstgeschwindigkeit_ = hoechstgeschwindigkeit;
00207         // Nun nicht mehr zufaellig waehlen, sondern die Voreinstellungen nutzen
00208         zufallsFlag_ = 0;
00209 }
00210 
00219 void Generator::setzeTaktZeit( double zeitintervall ){
00220         taktZeit_ = zeitintervall;
00221 }
00222 
00231 long int Generator::gibId(){
00232         return id_;
00233 }
00234 
00235 
00244 int Generator::gibAnzahlFahrzeuge(){
00245         return anzahlFahrzeuge_;
00246 }
00247 
00256 int Generator::gibAktuelleAnzahlFahrzeuge(){
00257         return aktuelleAnzahlFahrzeuge_;
00258 }
00259 
00268 bool Generator::sollEntferntWerden(){
00269         return loescheMich_;
00270 }
00271 
00278 void Generator::zufall(){
00279         int rgb(0), farbe(0);
00280         
00281         // Zu erst den Fahrzeugtyp ermitteln
00282         fahrzeugTyp_ = zufallszahl( 1, 4 );
00283         // Auf Basis des Types Vmax, a_pos, a_neg, laenge bestimmen
00284         switch( fahrzeugTyp_ ){
00285                 case BIKE:{
00286                         fahrzeugHoechstgeschwindigkeit_ = zufallszahl( 200, 360 );
00287                         fahrzeugBeschleunigungPositiv_ = (double) zufallszahl( 70, 93 ) / 10;
00288                         fahrzeugBeschleunigungNegativ_ = (double) zufallszahl( 70, 100 ) / -10;
00289                         fahrzeugLaenge_ = (double) zufallszahl( 13, 25 ) / 10;
00290                         break;
00291                            }
00292                 case PKW:{
00293                         fahrzeugHoechstgeschwindigkeit_ = zufallszahl( 170, 250 );
00294                         fahrzeugBeschleunigungPositiv_ = (double) zufallszahl( 19, 35 ) / 10;
00295                         fahrzeugBeschleunigungNegativ_ = (double) zufallszahl( 60, 75 ) / -10;
00296                         fahrzeugLaenge_ = (double) zufallszahl( 25, 50 ) / 10;
00297                         break;
00298                            }
00299                 case LKW:{
00300                         fahrzeugHoechstgeschwindigkeit_ = zufallszahl( 70, 90 );
00301                         fahrzeugBeschleunigungPositiv_ = (double) zufallszahl( 13, 14 ) / 10;
00302                         fahrzeugBeschleunigungNegativ_ = (double) zufallszahl( 45, 55 ) / -10;
00303                         fahrzeugLaenge_ = (double) zufallszahl( 6, 12 );
00304                         break;
00305                            }
00306                 case BUS:{
00307                         fahrzeugHoechstgeschwindigkeit_ = zufallszahl( 80, 130 );
00308                         fahrzeugBeschleunigungPositiv_ = (double) zufallszahl( 15, 16 ) / 10;
00309                         fahrzeugBeschleunigungNegativ_ = (double) zufallszahl( 45, 55 ) / -10;
00310                         fahrzeugLaenge_ = (double) zufallszahl( 6, 10 );
00311                         break;
00312                            }
00313         }
00314         // Die Farbe bestimmen
00315         rgb = zufallszahl( 0, 2 );
00316         if( rgb == 0 ){
00317                 fahrzeugFarbe_.x = zufallszahl( 150, 255 );
00318                 fahrzeugFarbe_.y = 0;
00319                 fahrzeugFarbe_.z = 0;
00320         }
00321         else if( rgb == 1 ){
00322                 fahrzeugFarbe_.x = 0;
00323                 fahrzeugFarbe_.y = zufallszahl( 150, 255 );
00324                 fahrzeugFarbe_.z = 0;
00325         }
00326         else{
00327                 fahrzeugFarbe_.x = 0;
00328                 fahrzeugFarbe_.y = 0;
00329                 fahrzeugFarbe_.z = zufallszahl( 150, 255 );
00330         }
00331 
00332         fahrzeugLebensdauer_ = zufallszahl( -1, 1000 );
00333 }
00334 
00342 void Generator::erstelleFahrzeug(){
00343         Fahrzeug *fahrzeug;
00344         try{
00345                 fahrzeug = new Fahrzeug( fahrzeugTyp_, fahrzeugLaenge_, fahrzeugFarbe_, 
00346                                                                         fahrzeugBeschleunigungPositiv_, fahrzeugBeschleunigungNegativ_, 
00347                                                                         fahrzeugHoechstgeschwindigkeit_, spur_, fahrzeugLebensdauer_ );
00348                 if( fahrzeugFahrtenbuch_ != 0 ){
00349                         fahrzeug->setzeFahrtenbuch( fahrzeugFahrtenbuch_, fahrzeugAnzahlWegpunkte_ );
00350                 }
00351                 fahrzeugliste_->datenHinzufuegen( fahrzeug );
00352         }
00353         catch( Fehler *fehler ){
00354                 throw( fehler );
00355         }
00356 }
00357 
00366 void Generator::setzeFahrzeugliste( Liste *fahrzeugliste ){
00367         fahrzeugliste_ = fahrzeugliste;
00368 }
00369 
00370 
00371 /*
00372  * @fn          void Generator::inString( )
00373  * @brief       Gibt den Generator auf der Konsole aus
00374  *
00375  * @author      Nico Schroeder
00376  */
00377 void Generator::inString( ){
00378         cout << this;
00379 }
00380 
00390 ostream &operator<< ( ostream &os, Generator *generator ){
00391         os << "----------Generator----------" << endl;
00392         os << "ID:                   " << generator->id_ << endl;
00393         os << "Erstellzeit:          " << generator->taktZeit_ << endl;
00394         os << "noch erstllende Fzg:  " << generator->anzahlFahrzeuge_ - generator->aktuelleAnzahlFahrzeuge_ << endl;
00395         
00396         return os;
00397 }
00398 
00407 void Generator::exportieren( string cvsDateiname ){
00408         // Datei oeffnen
00409         // Daten ausstreamen
00410         // Datei schliessen
00411 }

Erzeugt am Tue Jun 14 18:36:49 2005 für TraffSpot von  doxygen 1.3.9.1