Gegeben seien die Klassen
Vertex und
GeometricObject aus der letzten Aufgabe.
In dieser Aufgabe soll eine geometrische Figur als Polygonzug realisiert werden. Hierzu sei die folgende Klasse gegeben, die Polygone realisiert:
package name.panitz.oose.ws17;
import java.util.LinkedList;
public class Polygon extends LinkedList<Vertex>{
void add(double x,double y){
add(new Vertex(x,y));
}
double[] getXs(){
double[] xs = new double[size()];
int i=0;
for (Vertex v:this)xs[i++]=v.x;
return xs;
}
double[] getYs(){
double[] ys = new double[size()];
int i=0;
for (Vertex v:this)ys[i++]=v.y;
return ys;
}
}
Zu einem Polygon, das mit dem Standardkonstruktor erzeugt wurde, können Punkte mit der Methode
add hinzugefügt werden.
Zusätzlich gibt es folgende abstrakte Unterklasse
PolygonObject der Klasse
GeometricObject, deren Objekte geometrische Figuren aus einem Polygon realisieren.
package name.panitz.oose.ws17;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Paint;
public abstract class PolygonObject extends GeometricObject {
Polygon p = new Polygon();
public PolygonObject(Vertex corner, double width,
double height, Vertex velocity){
super(corner, width, height, velocity);
}
abstract void initPolygon();
@Override
public void paintMeTo(GraphicsContext g) {
g.setFill(Paint.valueOf("red"));
super.paintMeTo(g);
double[] xs = p.getXs();
double[] ys = p.getYs();
for (int i = 0; i < p.size(); i++) {
xs[i] = xs[i] + corner.x;
ys[i] = ys[i] + corner.y;
}
g.setFill(Paint.valueOf("yellow"));
g.fillPolygon(xs, ys, p.size());
g.setFill(Paint.valueOf("black"));
}
}
Die abstrakte Methode
void initPolygon(); ist für jede Unterklasse von
PolygonObject so zu überschreiben, dass das Polygon mit den entsprechenden Punkten gefüllt wird. Das Polygon ist so zu setzen, dass das umgebende Rechteck des Polygons (
bounding box) die linke obere Ecke im Ursprung hat. Es soll also nicht der Eckpunkt
corner der geometrischen Figur mit eingerechnet werden. Die entsprechende Verschiebung nimmt erst die Methode
paintMeTo der Klasse
PolygonObject vor.
Schreiben Sie in dieser Aufgabe eine Unterklasse
IsoscelesTriangle der Klasse
PolygonObject. Sie soll gleichschenkelige Dreiecke realisieren. Die Basis des Dreiecks sei unten, die Schenkel weisen nach oben.
Hierzu müssen Sie die Methode
initPolygon implementieren, so dass die drei Eckpunkte des Dreickecks eingefügt werden.
Sie müssen im Konstruktor korrekt den Konstruktor der Oberklasse aufrufen und als letzte Anweisung im Konstruktor die Methode
initPolygon() aufrufen.
Überschreiben Sie auch die Methode
size(), so dass der Flächeninhalt des Dreiecks berechnet wird.
Sie können sich wieder optisch von der Stimmigkeit Ihrer Lösung überzeugen, wenn Sie mit den Klassen
FXScreen,
Gapplication und
Play Objekte auf dem Bildschirm anzeigen.