Lehrer Nussbaumer - JAVA (eine kleine Einführung ;)

Grundlagen

GUI

Eingabe

Ausgabe

Applikationen

  1. Wurfbahnen
  2. Satellitenbahnen
  3. Interaktion
  4. Notizzettel
  5. Typkonvertierung
  6. Rechner
  7. Mandelbrot-Menge
  8. Julia-Menge

Applets

Servlets

Beispiele

Spiele

IDEs

Skriptum

JAVA-DOCS


-----------------
letzte Änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

Satellitenbahnen

Die Bahnkurve eines Satelliten, der um die Erde kreist, soll punktweise berechnet und - maßstäblich verkleinert - ausgegeben werden. Dabei wird das "Gerüst" einer Applikation und die Methode paint() verwendet...

Beispiel:

Aus der Graviationskraft in einem Punkt des Erdschwerefeldes kann die Beschleunigung auf einen Satelliten, aus der Beschleunigung der Geschwindigkeitszuwachs, und aus der neuen Geschwindigkeit die Verschiebung des Satelliten (jeweils in einem bestimmten Zeitschritt) berechnet werden.


Code:

import java.awt.*;
import java.awt.event.*;

public class satellit extends Frame {

    satellit() {
	super("Bahnkurve eines Satelliten");
    }

    public static void main (String[] args) {
	satellit proggi = new satellit();
	WindowListener wl = new WindowAdapter() {
		public void windowClosing(WindowEvent e) {
		    System.exit(0);
		}
	    };
	proggi.addWindowListener(wl);
	proggi.setLocation(100,100);
	proggi.setSize(400,400);
	proggi.show();
    }

    public void paint (Graphics g) {
	double GM, r, r3, x, y, vx, vy, ax, ay, dt, alpha, er;
	int zaehler;

	zaehler = 120;
	GM = 392000000000000.0;
	er = 6370000;
	alpha = 0;
	vx = 0;
	vy = 5500;
	dt = 500;
	x = 3*er;;
	y = 0;

	g.setColor(Color.white);
	g.fillRect(10,10,380,380);
	g.setColor(Color.red);
	g.drawOval(200 - (int)(er/(20*er)*400),
		   200 - (int)(er/(20*er)*400),
		   (int)(er/(20*er)*800),
		   (int)(er/(20*er)*800));
	g.setColor(Color.blue);

	for (int i=1;i<zaehler;i++) {
	    r3 = Math.sqrt(x*x+y*y);
	    r=r3*r3*r3;
	    ax=-GM*x/r;
	    ay=-GM*y/r;
	    vx=vx+ax*dt;
	    vy=vy+ay*dt;
	    x=x+vx*dt;
	    y=y+vy*dt;

	    g.fillRect(200+(int)(x/(20*er)*400),200+(int)(y/(20*er)*400),1,1);
	}
    }
}

Kommentar:

  • GM = 392000000000000.0 - die Angabe der Dezimalzahl mit der Nachkommastelle "0" legt das Datenformat "double" fest (andernfalls erhält man einen Zahlenüberlauf).
  • Maßstab - die (in Vielfachen des Erdradius) berechneten Wegstrecken werden zunächst durch den 20-fachen Erdradius dividiert ( = Pixel-Größe) und anschließend mit der Zahl der zur Verfügung stehenden Pixel multipliziert. Der Nullpunkt des Koordinatensystems wurde in das Zentrum der Erde verlegt, die in der Mitte des Rahmens (an der Position x = 200, y = 200) gezeichnet wird.
  • translate(x,y) - verschiebt den Koordinatenursprung an die Position (x/y). Wurde hier nicht verwendet.


Aufgabe:

Erweitere das Programm so, dass die "Starthöhe", die "Anfangsgeschwindigkeit", der "Abschusswinkel" und der "Zeitschritt" vom Benutzer gewählt werden kann (Texteingabefelder)! Ausserdem soll ein Button das Neuzeichnen der Satellitenbahn starten.


© Alfred Nussbaumer, Weblog "MiniNuss"