Szabadon eső test szimulációja

Egy testet h0 magasságból elengedünk, így a gravitációs erő álltal gyorsítva halad a föld felé. Írjunk osztály a test mozgásának modellezésére!

  • A tagváltozók és tagfüggvények deklarációit külön fejlécfájlban tároljuk, és gondoskodjunk róla, hogy egy esetleges többszöri beépítés ne jelentsen problémát!
  • Az osztály tárolja privát tagváltozókban a gravitációs gyorsulást és azt a magasságot ahonnan a testet elengedjük. A külső elérés érdekében írjunk hozzá publikus lekérdező és értékadó tagfüggvényeket. Ügyeljünk rá hogy a gravitációs gyorsulás és a magasság csak pozitív értékeket kaphassanak!
  • Az osztálypéldányokat a magassággal és a gravitációs gyorsulással (elhagyható, ekkor a 9.81 kezdőértéket kapja) lehet inicializálni.
  • Lekérdezhető az adott időpillanatban mekkora a sebessége és milyen magasan van (mindkettő 0 ha már földet ért).

  • Lekérdezhető melyik időpillanatban fog földet érni.


A megoldásért kattints ide!

// FallingObject.h

#ifndef _FALLING_OBJECT

#define _FALLING_OBJECT

 

 

class FallingObject {

               private:

                              double InitialHeight, Gravity;

 

               public:

                              FallingObject(double H, double G = 9.81);

                              double GetInitialHeight();

                              double GetGravity();

                              void SetInitialHeight(double H);

                              void SetGravity(double G);

                              double GetHeight(double Time);

                              double GetSpeed(double Time);

                              double GetFallTime();

};

 

 

#endif // _FALLING_OBJECT



//////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////

// FallingObject.cpp

#include "FallingObject.h"

#include <cmath>

using namespace std;

 

              

FallingObject::FallingObject(double H, double G) {

               SetInitialHeight(H);

               SetGravity(G);

}

 

 

double FallingObject::GetInitialHeight() {

               return InitialHeight;

}

 

 

double FallingObject::GetGravity() {

               return Gravity;

}

 

 

void FallingObject::SetInitialHeight(double H) {

               InitialHeight = H > 0 ? H : 1;

}

 

 

void FallingObject::SetGravity(double G) {

               Gravity = G > 0 ? G : 1;

}

 

 

double FallingObject::GetHeight(double Time) {

               if (Time > GetFallTime()) {

                              return 0;

               } else {

                              return InitialHeight - (Gravity / 2) * (Time * Time);

               }

}

 

 

double FallingObject::GetSpeed(double Time) {

               if (Time > GetFallTime()) {

                              return 0;

               } else {

                              return Gravity * Time;

               }

}

 

 

double FallingObject::GetFallTime() {

               return sqrt(InitialHeight / (2 * Gravity));

}

 

 




2008.02.08. 16:23:41 |  Permalink  |  Hozzászólások száma: 0  |  Tárgyszavak: Osztályok


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások