78 lines
2.3 KiB
C++

#include <iostream>
#include <cmath>
#include <cassert>
#include "flugkurve02.h"
using namespace std;
void function_checks() {
// mulVektor
Vektor test_vec = {10, 11};
Vektor result = mulVektor(test_vec, -3);
assert(fabs(result.x + 30) < 0.1 && "Result must be -30");
assert(fabs(result.y + 33) < 0.1 && "Result must be -33");
cout << "mulVektor erfolgreich" << endl;
// addVektor
Vektor test_vec_2 = {-10, 31};
result = addVektor(test_vec, test_vec_2);
assert(fabs(result.x + 0) < 0.1 && "Result must be 0");
assert(fabs(result.y - 42) < 0.1 && "Result must be 42");
cout << "addVektor erfolgreich" << endl;
// bewegeKoerper
Koerper koerper;
koerper.masse = 10;
koerper.position = { 0, 0 };
koerper.geschwindigkeit = { 10, 10 };
Vektor bewegung = {1, -1};
const float dt = 7.0;
koerper = bewegeKoerper(koerper, bewegung, dt);
assert(fabs(koerper.geschwindigkeit.x - 10.7) < 0.1 && "Result must be 10.7");
assert(fabs(koerper.geschwindigkeit.y - 9.3) < 0.1 && "Result must be 9.3");
assert(fabs(koerper.position.x - 74.9) < 0.1 && "Result must be 74.9");
assert(fabs(koerper.position.y - 65.1) < 0.1 && "Result must be 65.1");
cout << "bewegeKoerper erfolgreich" << endl;
}
int main()
{
cout << "Funktionsüberprüfung" << endl;
// Function checks
function_checks();
// Check whole program
cout << "Simulation" << endl;
Koerper koerper;
koerper.masse = 10;
koerper.position = { 0, 0 };
koerper.geschwindigkeit = { 10, 10 };
// Parametrierung der auf den Körper wirkende Kräfte:
const Vektor BESCHLEUNIGUNG_GRAVITATION = {0, -9.81}; // [m/s^2]
const float REIBUNGSKOEFFIZIENT = -5; // [kg/s]
// Sorgt dafür, dass 2 Nachkommastellen angezeigt werden:
cout << fixed;
cout.precision(2);
// Simulation:
const float dt = 0.1;
for(;;)
{
cout << "Position des Körpers: ";
ausgabeKoerper(koerper);
cout << endl;
// Bestimmung der Kraft
Vektor reibungskraft = mulVektor(koerper.geschwindigkeit,
REIBUNGSKOEFFIZIENT);
Vektor anziehungskraft = mulVektor(BESCHLEUNIGUNG_GRAVITATION,
koerper.masse);
Vektor gesamtkraft = addVektor(reibungskraft,anziehungskraft);
// Ermittlung der neuen Position und neuen Geschwindigkeit
koerper = bewegeKoerper(koerper,gesamtkraft,dt);
if(koerper.position.y<=0)
{
break;
}
}
}