Subato

IsoscelesTriangle in Swing

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;

import java.util.LinkedList;

public class Polygon extends LinkedList<Vertex>{
  void add(double x,double y){
    add(new Vertex(x,y));
  }
  
  int[] getXs(){
    int[] xs = new int[size()];
    int i=0;
    for (Vertex v:this)xs[i++]=(int)Math.round(v.x);
    return xs;
  }
  int[] getYs(){
    int[] ys = new int[size()];
    int i=0;
    for (Vertex v:this)ys[i++]=(int)Math.round(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;
import java.awt.Graphics;
import java.awt.Color;

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(Graphics g) {
    g.setColor(Color.RED);
    super.paintMeTo(g);

    int[] xs = p.getXs();
    int[] ys = p.getYs();
    for (int i = 0; i < p.size(); i++) {
      xs[i] = xs[i] + (int)Math.round(corner.x);
      ys[i] = ys[i] + (int)Math.round(corner.y);
    }
    g.setColor(Color.YELLOW);
    g.fillPolygon(xs, ys, p.size());
    g.setColor(Color.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.


package name.panitz.oose; public class IsoscelesTriangle extends PolygonObject { double legLength; public IsoscelesTriangle(Vertex corner, double baseLength, double legLength, Vertex velocity) { // TODO super-Aufruf, Länge der Schenkel initialisieren // und initPolygon() Aufrufen } @Override void initPolygon() { //TODO Punkte des Dreickecks in p einfügen } @Override public String toString() { return "new IsoscelesTriangle(new Vertex" +corner+", "+width+", "+legLength+", new Vertex"+velocity+")"; } }
java