////////////////////////////////////////////////////////////////////////////
// Model MICEK.CPP SIMLIB/C++
//
// Skákající míček (kombinovaný model, varianta 1)
//
#include "simlib.h"
const double g = 9.81; // gravitační zrychlení
class Micek : ConditionDown { // popis modelu míčku
Integrator v,y; // stav
unsigned count; // čítač dopadů
void Action() { // je dopad
Print("# Odraz %u:\n", ++count);
Out(); // tiskneme stav při dopadu
v = -0.8 * v.Value(); // ztráta energie...
y = 0; // je nutné pro detekci dalšího dopadu !!!
if(count>=20) // povolíme max. 20 odrazů
Stop(); // konec simulace
}
public:
Micek(double initialposition) :
ConditionDown(y), // podmínka dopadu: (y>=0) z TRUE na FALSE
v(-g), // y' = INTG( - m * g )
y(v, initialposition), // y = INTG( y' )
count(0) {} // počet dopadů
void Out() {
Print("%-9.3f % -9.3g % -9.3g\n",
T.Value(), y.Value(), v.Value());
}
};
Micek m1(1.0); // model systému
void Sample() { m1.Out(); } // výstup stavu míčku
Sampler S(Sample,0.01);
int main() { // popis experimentu
SetOutput("micek.dat");
_Print("# MICEK - model skákajícího míčku\n");
Print("# Time y v \n");
Init(0); // inicializace parametrů experimentu
SetStep(1e-10,0.5); // rozsah kroku integrace
SetAccuracy(1e-5,0.001); // max. povolená chyba integrace
Run(); // simulace
return 0;
}
// konec
syntax highlighted by Code2HTML, v. 0.9.1