83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
#include <iostream>
|
|
#include <cmath>
|
|
#include <cassert>
|
|
#include "flugkurve03.h"
|
|
using namespace std;
|
|
|
|
void function_checks() {
|
|
// Vektor init
|
|
Vektor test_vec = {10, 11};
|
|
assert(fabs(test_vec.x - 10) < 0.1 && "x must be 10");
|
|
assert(fabs(test_vec.y - 11) < 0.1 && "x must be 11");
|
|
cout << "Vektor init erfolgreich" << endl;
|
|
// Vektor mul
|
|
test_vec.mul(2.0);
|
|
assert(fabs(test_vec.x - 20) < 0.1 && "x must be 20");
|
|
assert(fabs(test_vec.y - 22) < 0.1 && "x must be 22");
|
|
cout << "Vektor mul erfolgreich" << endl;
|
|
// Vektor add
|
|
Vektor test_vec_2 = {1, 2};
|
|
test_vec.add(test_vec_2);
|
|
assert(fabs(test_vec.x - 21) < 0.1 && "x must be 21");
|
|
assert(fabs(test_vec.y - 24) < 0.1 && "x must be 24");
|
|
cout << "Vektor add erfolgreich" << endl;
|
|
// Koerper init + getter
|
|
float masse = 10;
|
|
Vektor position = {2, 3};
|
|
Vektor geschwindigkeit = {10, 11};
|
|
Koerper koerper = {masse, position, geschwindigkeit};
|
|
assert(fabs(koerper.liefereMasse() - 10) < 0.1 && "Mass must be 10");
|
|
assert(fabs(koerper.lieferePosition().x - 2) < 0.1 && "Position: x must be 2");
|
|
assert(fabs(koerper.lieferePosition().y - 3) < 0.1 && "Position: y must be 3");
|
|
assert(fabs(koerper.liefereGeschwindigkeit().x - 10) < 0.1 && "Velocity: x must be 10");
|
|
assert(fabs(koerper.liefereGeschwindigkeit().y - 11) < 0.1 && "Velocity: y must be 11");
|
|
cout << "Koerper init + getter erfolgreich" << endl;
|
|
// Koerper bewegen
|
|
Vektor beschleunigung = {-2, -9};
|
|
float dt = 0.1;
|
|
koerper.bewegen(beschleunigung, dt);
|
|
assert(fabs(koerper.liefereMasse() - 10) < 0.1 && "Mass must be 10");
|
|
assert(fabs(koerper.lieferePosition().x - 2.98) < 0.1 && "Position: x must be 2.98");
|
|
assert(fabs(koerper.lieferePosition().y - 4.01) < 0.1 && "Position: y must be 4.01");
|
|
assert(fabs(koerper.liefereGeschwindigkeit().x - 9.8) < 0.1 && "Velocity: x must be 9.8");
|
|
assert(fabs(koerper.liefereGeschwindigkeit().y - 10.1) < 0.1 && "Velocity: y must be 10.1");
|
|
cout << "Koerper bewegen erfolgreich" << endl;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
cout << "Funktionsüberprüfung" << endl;
|
|
|
|
// Function checks
|
|
function_checks();
|
|
|
|
// Check whole program
|
|
cout << "Simulation" << endl;
|
|
// Körper:
|
|
const float MASSE = 10;
|
|
const Vektor START_POSITION = {0,0};
|
|
const Vektor START_GESCHWINDIGKEIT = {10,10};
|
|
Koerper koerper(MASSE,START_POSITION,START_GESCHWINDIGKEIT);
|
|
// 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]
|
|
// Simulation:
|
|
const float dt = 0.1;
|
|
for(;;)
|
|
{
|
|
cout << "Position des Körpers: " << koerper.text() << endl;
|
|
// Bestimmung der neuen Beschleunigung
|
|
Vektor beschleunigung;
|
|
beschleunigung = koerper.liefereGeschwindigkeit();
|
|
beschleunigung.mul(REIBUNGSKOEFFIZIENT/koerper.liefereMasse());
|
|
beschleunigung.add(BESCHLEUNIGUNG_GRAVITATION);
|
|
// Ermittlung der neuen Position und neuen Geschwindigkeit
|
|
koerper.bewegen(beschleunigung,dt);
|
|
if(koerper.lieferePosition().y<=0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|