OPR_Pr/flugkurve.cpp
2025-04-25 11:35:57 +02:00

84 lines
2.1 KiB
C++

/**
* $Author: MahrTh $
* $Rev: 118 $
* $Date: 2015-03-21 21:39:51 +0100 (Sa, 21. Mär 2015) $
*/
#include <iostream>
#include <sstream>
using namespace std;
class Vektor {
public:
float x, y;
void add(Vektor vektor) {
x += vektor.x;
y += vektor.y;
}
void mul(float faktor) {
x *= faktor;
y *= faktor;
}
string text(){
stringstream ss;
ss << "(" << x << "," << y << ")";
return ss.str();
}
};
class Koerper{
public:
Vektor position;
Vektor geschwindigkeit;
float masse;
Koerper(Vektor position, Vektor geschwindigkeit, float masse) {
this->position = position;
this->geschwindigkeit = geschwindigkeit;
this->masse = masse;
}
Vektor lieferePosition() {
return position;
}
Vektor liefereGeschwindigkeit() {
return geschwindigkeit;
}
float liefereMasse() {
return masse;
}
void bewegen(Vektor beschleunigung, float dt) {
position.add({geschwindigkeit.x * dt, geschwindigkeit.y * dt});
geschwindigkeit.add({beschleunigung.x * dt, beschleunigung.y * dt});
}
string text() {
return position.text();
}
};
int main() {
// Körper:
const float MASSE = 10;
const Vektor START_POSITION = {0,0};
const Vektor START_GESCHWINDIGKEIT = {10,10};
Koerper koerper = {START_POSITION,START_GESCHWINDIGKEIT,MASSE};
// 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 Koerpers: " << 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;
}
}
}