x032.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "xmath.h"
4 #include "xmodel.h"
5 #include "xphysics.h"
6 
7 namespace nmx::apps::x032 {
8 
10 
14 enum Idx {
15  EKIN_MAX = 0, // maximale kinetische Energie
16  EPOT_MAX = 1, //maximale potenzielle Energie
17  Y_MAX = 2, //maximale Höhe
18  V0P = 3, //Geschwindigkeit direkt nach dem Stoß
19  THETA_MAX = 4, //maximaler Winkel
20  IMPULS = 5 // Kraftstoß
21 };
22 
26 class X032 : public XModel, public CResult<6, Idx>
27 {
28 private:
29  double _mass; //Gesamtmasse=Masse der Kugel + Masse des Blocks
30  std::array<double, 2> _bullet_velocity; // Kugelgeschwindigkeit
31 public:
32  // Eingabeparameter
33  const double mbullet; //Masse der Kugel
34  const double mblock; //Masse des Blocks
35  const double length; //Länge des Pendels
36 
37 public:
44  inline X032(double m1, double m2, double l)
45  : XModel{ __func__ }
46  , mbullet{ m1 }
47  , mblock{ m2 }
48  , length{ l } {
49  //sind alle Eingaben gültig ?
50  Check::all(nmx_msg, { m1 > 0, m2 > 0, l > 0 });
51  _mass = m1 + m2; //berechne die Gesamtmasse
52  }
53 
59  inline void exec(double v0, double phi0) {
60  _bullet_velocity = { v0, phi0 }; //speichere Geschwindigkeit
61  const double g = Earth::g;
62  //berechne cos(theta_max)
63  const double tmp = pow((mbullet * v0 * cos(phi0)) / _mass, 2);
64  const double cosThetaMax = 1 - 1 / (2 * g * length) * tmp;
65  //Wertezuweisung der internen Variablen
66  set_result(V0P, mbullet * v0 * cos(phi0) / _mass);
67  set_result(EKIN_MAX, 0.5 * _mass * pow(get(V0P), 2));
69  set_result(Y_MAX, get(EKIN_MAX) / (g * _mass));
70  set_result(THETA_MAX, acos(cosThetaMax));
71  set_result(IMPULS, -mbullet * v0 * sin(phi0));
72  }
73 
78  inline const auto &bullet_velocity() const { //
79  return _bullet_velocity;
80  }
81 }; //X032
82 
86 inline void run() {
87  //Modellklasse: Masse der Kugel, Masse des Blocks, Länge des Pendels
88  X032 xobj{ 20.0_g, 4.0, 1.5 };
89 
90  //für eine Reihe von Geschwindigkeitsbeträgen
91  for (double v0 = 200; v0 < 700; v0 += 100) {
92  //für jede Kugelgeschwindigkeit (Betrag) wird eine Zahlentabelle
93  //mit 6 Spalten erzeugt
94  Data<6> data;
95  //für eine Reihe von Winkeln
96  for (double p0 = -60.0_deg; p0 <= 10.0_deg; p0 += 10.0_deg) {
97  xobj.exec(v0, p0);
98  data += { v0,
99  Math::to_degrees(p0),
101  xobj(Idx::Y_MAX),
102  xobj(Idx::EKIN_MAX),
103  xobj(Idx::IMPULS) };
104  }
105  //öffne Dateien mit Namen bestehend aus Namen der Modellklasse
106  // den Geschwindigkeitsbetrag und Suffix
107  // (z.B. x032-200.tex und x032-200.csv)
108  //(eindeutiger Name der Datei durch den Geschwindigkeitsbetrag)
109  X032::save(data, Output::latex, v0);
110  X032::save(data, Output::plot, v0);
111  }
112 }
113 
114 } // namespace nmx::apps::x032
const double mbullet
Definition: x032.h:33
static double to_degrees(double x)
Definition: xmath.h:17
X032(double m1, double m2, double l)
X630 Konstruktor.
Definition: x032.h:44
The XModel class Basisklasse speichert eine ID in Form einer Zeichenkette enthält Hilfsfunktionen zur...
Definition: xmodel.h:22
#define nmx_msg
Definition: xerror.h:113
The X630 class Das ballistische Pendel.
Definition: x032.h:26
const double mblock
Definition: x032.h:34
const auto & bullet_velocity() const
bullet_velocity Kugelgeschwindigkeit
Definition: x032.h:78
void exec(double v0, double phi0)
exec berechne alle fehlenden Werte
Definition: x032.h:59
Idx
The Idx enum Zugriff auf die Ergebnisse mittels Index.
Definition: x032.h:14
const double length
Definition: x032.h:35
static void save(const T &data, Format fmt)
save Speicherung von Daten in eine Datei
Definition: xmodel.h:70
void run()
run Berechnung von Beispieldaten (ballistisches Pendel)
Definition: x032.h:86
The CResult class Speicherung von Rechenergebnissen.
Definition: xmodel.h:106
static const Format latex
Definition: xoutput.h:17
static constexpr double g
Definition: xphysics.h:20
void set_result(Idx idx, double val)
operator () einem Element wird ein Wert zugewiesen
Definition: xmodel.h:118
static void all(const std::string &s, std::initializer_list< bool > lst)
input teste mehrere Bedingungen auf einmal
Definition: xerror.h:76
static const Format plot
Definition: xoutput.h:18