A29: Dreier-Vektoren -> Vierer-Vektoren

A29: Dreier-Vektoren -> Vierer-Vektoren

Beitragvon Kazaar » 02.07.2010 15:35

Weil ich diese Aufgabe nicht in den alten Musterlösungen finden kann, stelle ich ein letztes Mal mein eigenes Programm zur Verfügung. Es gibt aber nicht so viele Kommentare, weil ich die Vererbungsregeln mittlerweile ganz gut verstanden habe, was für die Aufgabe nötig ist. (Was auf dem Blatt len_sq() heißt, ist bei mir normquadrat().)

Code: Alles auswählen
/*
* source.cpp
*
*  Created on: 02.07.2010
*      Author: Kazaar
*       Title: Aufgabe 29
*/

#include <iostream>
#include <cmath>

using namespace std;

class vektor3 {
protected:
   double x, y, z;

public:
   vektor3(double a = 0, double b = 0, double c = 0) {
      x = a;
      y = b;
      z = c;
   }
   ~vektor3() {
      //cout << "Einen 3er-Vektor gelöscht." << endl;
   }
   void ausgeben();
   double normquadrat();
   double norm();
   double zwischenwinkel(vektor3);
};

void vektor3::ausgeben() {
   cout << x << ", " << y << ", " << z;
}

double vektor3::normquadrat() {
   return x*x + y*y + z*z;
}

double vektor3::norm() {
   return sqrt(normquadrat());
}

double vektor3::zwischenwinkel(vektor3 b) {
   double oben = x * b.x + y * b.y + z * b.z;
   double unten = norm() * b.norm();
   return acos(oben / unten) / 3.14159265; // Winkel zwischen zwei Vektoren in Einheiten von pi ausgeben
}


class vektor4: public vektor3 {
private:
   double t;

public:
   vektor4(double d = 0, double a = 0, double b = 0, double c = 0) {
      x = a;
      y = b;
      z = c;
      t = d;
   }
   ~vektor4() {
      //cout << "Einen 4er-Vektor gelöscht." << endl;
   }
   void ausgeben();
   double normquadrat();
};

void vektor4::ausgeben() {
   cout << t << ", ";
   vektor3::ausgeben();
}

double vektor4::normquadrat() {
   return t*t - vektor3::normquadrat();
}


int main() {
   vektor4 a(0,1,0,0);
   vektor4 b(2,0,4,0);
   cout << "Vektor a: ";
   a.ausgeben();
   cout << endl << "Normquadrat (Minkowski): " << a.normquadrat() << endl;
   cout << "Vektor b: ";
   b.ausgeben();
   cout << endl << "Normquadrat (Minkowski): " << b.normquadrat() << endl;
   cout << "Zwischenwinkel: " << a.zwischenwinkel(b) << " pi" << endl;
   //b.vektor3::ausgeben(); // gibt die Raumkomponenten von b aus


   cout << endl << "-- Beendet --" << endl;
   return 0;
}
Kazaar
 
Beiträge: 326
Registriert: 29.10.2008 21:35

Re: A29: Dreier-Vektoren -> Vierer-Vektoren

Beitragvon M.A. » 02.07.2010 16:05

Hier meins:
Code: Alles auswählen
// ÜB12 Aufgabe 29: Dreier/Vierervektoren
#include <iostream>
#include <cmath>

using namespace std;

// KLASSEN -------------------
class vek_3d;
class vek_4d;


class vek_3d {
      protected:
              double x,y,z;   
      public:
             vek_3d(void);
             vek_3d(double,double,double);
             void set(double,double,double);
             double len_sq(void);
             double angle(vek_3d);
             double angle(vek_4d);
             double skalarpr(vek_3d);
};

class vek_4d : public vek_3d{                   // vek_4d erbt von vek_3d
      protected:
              double t;
      public:
             vek_4d(void);
             vek_4d(double,double,double,double);
             void set(double,double,double,double);
             double len_sq(void);
             void get_input(void);
             vek_3d to_3d(void);
      };

     
// METHODEN ---------
// 3D --------------
vek_3d::vek_3d (){                                           // Konstruktor
                   set(0,0,0);
                   }
                   
vek_3d::vek_3d (double xx, double yy, double zz){            // Konstruktor
                   set(xx,yy,zz);
                   }
                   
void vek_3d::set (double xx, double yy, double zz){            // Wert setzen
                   x = xx;
                   y = yy;
                   z = zz;
                   return;
                   }
                   
double vek_3d::len_sq(){                                       // Laengenquadrat
       return pow(x,2)+pow(y,2)+pow(z,2);
       }
       
double vek_3d::skalarpr(vek_3d p) {                          // Skalarprodukt
       return x*p.x + y*p.y + z*p.z;
       }
       
double vek_3d::angle(vek_3d p) {                             // Winkel berechnen
       return acos(skalarpr(p)/(sqrt(len_sq()*p.len_sq())))*(180/M_PI);
       }
double vek_3d::angle(vek_4d p) {                             // Winkel mit Vierervektor
       vek_3d a = p.to_3d();                                 // Vierer- in Dreiervektor umwandeln
       return angle(a);                                      // angle mit Dreiervektor ausführem
       }

// 4D --------------
vek_4d::vek_4d (){                                           // Konstrukton
                   set(0,0,0,0);
                   }
                   
vek_4d::vek_4d (double xx, double yy, double zz,double tt){  // Konstruktor
                   set(xx,yy,zz,tt);
                   }
void vek_4d::set (double xx, double yy, double zz,double tt){  // Wert Setzen
                   x = xx;
                   y = yy;
                   z = zz;
                   t = tt;
                   return;
                   }
double vek_4d::len_sq(){                                       // Laengenquadrat
       return pow(t,2)-vek_3d::len_sq();
       }
void vek_4d::get_input() {                                     // Eingabeaufforderung
    cout << "x = ";
    cin  >> x;
    cout << "y = ";
    cin  >> y;
    cout << "z = ";
    cin  >> z;
    cout << "t = ";
    cin  >> t;
    set(x,y,z,t);
    return;
    }
vek_3d vek_4d::to_3d(){                                 // Vierer- in Dreierverkor umwandeln
         vek_3d a(x,y,z);
         return a;
         }

// MAIN ----------------------
int main(){
    cout <<   "+--------------------------------+"<<endl;
    cout <<   "|   DREIER- UND VIERERVEKTOREN   |"<<endl;
    cout <<   "+--------------------------------+"<<endl<<endl;
   
    vek_4d a,b;
    cout << "Geben Sie den ersten Vierervektor (A) ein: " << endl;
    a.get_input();
    cout << "Geben Sie den zweitem Vierervektor (B) ein: " << endl;
    b.get_input();
   
    cout << "Das Laengenquadrat von A: " << a.len_sq() << endl;
    cout << "Das Laengenquadrat von B: " << b.len_sq() << endl;
    cout << "Der Raumwinkel zwischen A und B: " << a.angle(b) << " Grad"<< endl;
    return 0;
}
Bild
Benutzeravatar
M.A.
 
Beiträge: 366
Registriert: 25.10.2008 16:37


Zurück zu Programmieren

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron