2026-04-09 15:03:00 +02:00

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;
}
}
}