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&ouml;mgeschwindigkeit: <span id="Ausstroemgeschwindigkeit"></span> m/s
</div>

<div>
H&oumlhe bei Brennschluss: <span id="h_Brennschluss"></span> m
</div>

<div> 
max H&oumlhe : <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...