Ballistik Sumulator
by Veryape
HTML
<!DOCTYPE html>
<html lang="en-us">
<head>
<title>Ballistik Simulator</title>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/>
</head>
<body>
<div>Startmasse:
<span id="Startmasse"></span> kg
</div>
<div>
Massestrom: <span id="Massestrom"></span> kg/s
</div>
<div>
Brenndauer: <span id="Brenndauer"></span> s
</div>
<div>
Ausströmgeschwindigkeit: <span id="Ausstroemgeschwindigkeit"></span> m/s
</div>
<div>
Höhe bei Brennschluss: <span id="h_Brennschluss"></span> m
</div>
<div>
max Höhe : <span id="h_max"></span> m
</div>
<div>
Berechnung - Zeitabschnittsspanne:<span id="Berechnung_dt"></span> s
</div>
</body>
</html>
JavaScript
function Flugobjekt (
Start_Masse,
Start_Geschwindigkeit,
Start_Winkel,
Start_Hoehe,
Massestrom,
Ausstroemgeschwindigkeit,
Brenndauer)
{
this.m=Start_Masse;
this.v=Start_Geschwindigkeit;
// --- Javascript Math.PI/2 Problem der Math.tan spuckt nicht Infinity aus, sondern nur ne ziemlich hohe Zahl
if (Start_Winkel==Math.PI/2) this.start_senkrecht=true
else this.start_senkrecht=false;
this.Winkel=Start_Winkel;
this.x=0;
this.h=Start_Hoehe;
this.dotM=Massestrom;
this.vg=Ausstroemgeschwindigkeit;
this.tB=Brenndauer;
this.dt=0.001;
this.vx=Start_Geschwindigkeit*Math.cos(Start_Winkel);
this.vy=Start_Geschwindigkeit*Math.sin(Start_Winkel);
}
Flugobjekt.prototype.Erdbeschleunigung=function ()
{
return -9.81;
}
Flugobjekt.prototype.physics=function ()
{
var ax, ay; // -- Beschleunigungen;
var t=0; // -- Zeit
// ------------------------ Setzen von Kurzreferenzen
var dt=this.dt, dt_hoch2=dt*dt; // -- Zeitspanne in der Schleife
var tB=this.tB; // -- Brenndauer
var dotM=this.dotM, vg=this.vg; // -- Massestrom und Ausströmgeschwindigkeit (Kraft)
var m=this.m;
var vx=this.vx, vy=this.vy; // -- Geschwindigkeiten
var Winkel=this.Winkel; // -- Winkel
var x=this.x, h=this.h; // -- Wege
var sqrt=Math.sqrt; // -- Wurzel
// ------------------------ Setzen von Kurzreferenzen - END
// -- Steigung
var k;
if (this.start_senkrecht) k=Infinity;
else k=Math.tan (Winkel);
var h_max=0, h_Brennschluss=0; // -- maximale Höhe und Höhe bei Brennschluss
while (h>=0,t<1000)
{
// ------------------------ Beschleunigungen in x und y während dt
ax=0, ay=0;
ay+=this.Erdbeschleunigung();
if (tB>t)
{
if (k==Infinity) ay+=dotM*vg/m;
else
{
ax+=dotM*vg/ (sqrt (1+k*k)*m);
ay+=ax*k;
}
m-=dotM*dt;
}
// -- Wege in x und y nach dt
x+=vx*dt+0.5*ax*dt_hoch2;
h+=vy*dt+0.5*ay*dt_hoch2;
// -- Geschwindigkeiten in x und y nach...