Planeten konstruieren
Die Sonne scheint. Nun wird es Zeit, die Erde zu "erschaffen".
Wir erstellen eine neue Klasse Planet, mit der wir später auch weitere Planeten anlegen können. Welche Eigenschaften braucht ein Planet?
- Seine Position ist abhängig von dem Stern (der Sonne), um die er kreist. Wir legen eine Entfernung und eine Geschwindigkeit für den Planeten fest, mit der er um die Sonne kreist.
- Außerdem kennt jeder Planet ein
Sonne-Objekt, welches die Sonne in seinem Rotationszentrum repräsentiert (die Sonne, um die der Planet kreist). - Jeder Planet soll einen Namen bekommen, um ihn zu identifizieren, sowie eine Farbe für seine Darstellung.
classDiagram
Sonne <-- Planet : zentrum
class Sonne {
-x : float
-y : float
-farbe : color
+Sonne(pX: float, pY: float, pFarbe: color)
+getX() float
+getY() float
+getFarbe() color
+draw()
}
class Planet {
-name: String
-x: float
-y: float
-entfernung: float
-winkel: float
-geschwindigkeit: float
-farbe: color
+Planet(pX: float, pY: float, pEntfernung: float, +pGeschwindigkeit: float, pFarbe: color)
+getX() float
+getY() float
+getEntfernung() float
+getWinkel() float
+getGeschwindigkeit() float
+update()
+draw()
}
classDef default fill:#fff,stroke:#333;-
Erstelle einen neuen Tab "Planet".
-
Erstelle im neuen Tab eine Klasse
Planetmit den AttributenString name,float entfernung,float winkel,float geschwindigkeit,float xundfloat y.Orientiere dich an der Klasse
Sonne, die du im letzten Schritt erstellt hast. -
Erstelle Getter für die Attribute.
-
Erstelle ein Attribut
zentrum, dass den DatentypSonneerhält.Variablen (also auch Attribute) können als Datentyp nicht nur die bekannten Datentpyen wie
intoderfloaterhalten, sie können auch Objekte jeder beliebigen Klasse speichern:// Variable vom Typ "Sonne" Sonne eineObjektDerKlasseSonne; // bzw. als Attribut private Sonne eineObjektDerKlasseSonne; -
Erstelle einen Konstruktor für die Klasse, der als Parameter den Namen, die Entfernung, die Geschwindigkeit, die Farbe und ein Objekt des Typs
Sonneübergeben bekommt. Die Eigenschaftenwinkel,xundywerden im Konstruktor zunächst auf0.0gesetzt.
🔎 Lösung: Lösung zu 2
class Planet {
private String name;
private float x;
private float y;
private float entfernung;
private float winkel;
private float geschwindigkeit;
}
🔎 Lösung: Lösung zu 3
class Planet {
private String name;
private float x;
private float y;
private float entfernung;
private float winkel;
private float geschwindigkeit;
public String getName() {
return name;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public float getGeschwindigkeit() {
return geschwindigkeit;
}
public float getWinkel() {
return winkel;
}
public float getEntfernung() {
return entfernung;
}
public color getFarbe() {
return farbe;
}
}
🔎 Lösung: Lösung zu 4
class Planet {
private String name;
private float x;
private float y;
private float entfernung;
private float winkel;
private float geschwindigkeit;
// Speichert die Sonne, um die der Planet kreist.
private Sonne zentrum;
}
🔎 Lösung: Lösung zu 5
class Planet {
private String name;
private float x;
private float y;
private float entfernung;
private float winkel;
private float geschwindigkeit;
// Speichert die Sonne, um die der Planet kreist.
private Sonne zentrum;
public Planet(
String pName,
Sonne pZentrum,
float pGeschwindigkeit,
float pEntfernung,
color pFarbe
) {
name = pName;
x = 0.0;
y = 0.0;
winkel = 0.0;
zentrum = pZentrum;
geschwindigkeit = pGeschwindigkeit;
entfernung = pEntfernung;
farbe = pFarbe;
}
public String getName() {
return name;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public float getGeschwindigkeit() {
return geschwindigkeit;
}
public float getWinkel() {
return winkel;
}
public float getEntfernung() {
return entfernung;
}
public color getFarbe() {
return farbe;
}
}
Die Position berechnen
Die Position eines Planeten berechnet sich aus der Position seiner Sonne, seiner Entfernung zur Sonne und seinem Rotationswinkel.
Die Berechnung seiner Position auf der Kreisbahn um die Sonne implementierst Du im nächsten Schritt.
Da diese Position aber relativ zur Sonne verschoben werden muss und unsere Sonne sich nicht an den Koordinaten befindet, muss die (später) berechnete Position aus Entfernung und Rotationswinkel um die Position der Sonne verschoben werden.
Um die Koordinaten der Sonne zu erhalten, können wir die zuvor implementierten Getter getX() und getY() der Sonne benutzen. Die Sonne ist im Planeten im Attribut zentrum gespeichert. Um die Methoden eines bestimmten Objekts zu nutzen, verwendet man die "Punktnotation":
zentrum.getX() // x-Koordinate der Sonne
- Ändere die Getter für
xundyso ab, dass sie die absolute Position (relativ zur Sonne) des Planeten berechnen und zurückgeben (addiere alsox/yund die x- / y-Koordinate der Sonne, bevor du das Ergebnis zurückgibst). - Implementiere nun (analog zu
Sonne) einedraw-Methode, die unseren (blauen) Planeten an seine absoluten Koordinaten zeichnet. Rufe dazugetX()/getY()auf, anstatt direktxundyzu verwenden.
🔎 Lösung: Lösung zu 1
public float getX() {
return zentrum.getX() + x;
}
public float getY() {
return zentrum.getY() + y;
}
🔎 Lösung: Lösung zu 2
public void draw() {
noStroke();
fill(farbe);
ellipse(getX(), getY(), 20, 20);
// Alternativ geht auch das hier:
// ellipse(zentrum.getX() + x, zentrum.getY() + y, 20, 20);
}
Jetzt müssen wir nur noch das Hauptprogramm so modifizieren, dass der Planet angezeigt wird:
Sun sol = new Sonne(400, 300, color(236, 189, 44));
// Achte darauf, dass die Parameter in derselben Reihenfolge sind,
// die im Konstruktor von "Planet" steht.
Planet erde = new Planet("Erde", sol, 120.0, -.01, color(0, 150, 255));
void setup() {
size(800, 600);
}
void draw() {
background(0);
sol.draw();
// Hier die Erde zeichnen.
erde.draw();
}
Oh nein! Unser schöner Planet ist in der Sonne verglüht. Wir sollten schnell die Position der Erde anpassen, damit das nicht wieder passiert.