import java.awt.Color; abstract class GeoKlasse{ double pi = Math.PI; abstract double umfang(); abstract double flaeche(); abstract void verschieben (int dx, int dy); void verschieben (int delta) {verschieben(delta, delta); } } class Kreis extends GeoKlasse { private Punkt pM; private int radius; int getradius(){ return radius;} Kreis() {super(); pM = new Punkt(); } Kreis(int x, int y, int r){ super(); pM = new Punkt(x, y); radius = r; } Kreis(Punkt p, int r){ super(); pM = (p instanceof GraPunkt) ? new GraPunkt((GraPunkt) p) : new Punkt(p); radius = r; } void verschieben (int dx, int dy ) { pM.verschieben(dx, dy); } double umfang() { return pi * radius * 2; } double flaeche() { return pi * radius * radius; } public String toString(){ return "Kreis mit radius: " + radius + " und Mittelpunkt " + pM.toString() + " und Fläche " + flaeche(); }; Kreis Groesser (Kreis k) { if (k.radius > radius) return k; else return this; } static Kreis Groesser (Kreis k1, Kreis k2) { if (k1.radius > k2.radius) return k1; else return k2; } } class graKreis extends Kreis { private boolean sichtbar = false; private int dicke = 1; private Color randFarbe = Color.black; private Color innenFarbe = Color.white; graKreis() {super();} graKreis(int x, int y, int r) { super(x, y, r); } graKreis(Punkt p, int r) { super(p, r); } graKreis(Punkt p, int r, boolean pS, int pD, Color pFR, Color pFI) { this(p, r); sichtbar = pS; dicke = pD; randFarbe = pFR; innenFarbe = pFI; } void malen () { System.out.println(" Malen von Kreis."); } void loeschen () { System.out.println(" Loeschen von Kreis."); } void verschieben (int dx, int dy) { loeschen (); super.verschieben(dx, dy); malen (); } public String toString(){ String s1 = sichtbar ? " sichtbar " : " nicht sichtbar "; String s2 = " Dicke: " + dicke; String s3 = " Rand-Farbe: " + randFarbe; String s4 = " Innen-Farbe: " + innenFarbe; return super.toString() + "\n...gra:" + s1 + s2 + s3 + s4; }; } class Rechteck extends GeoKlasse { private Punkt p1, p2; Punkt getP1(){ return p1;} Punkt getP2(){ return p2;} Rechteck() {super(); p1 = new Punkt(); p2 = new Punkt();} Rechteck(int x1, int y1, int x2, int y2){ super(); p1 = new Punkt(x1, y1); p2 = new Punkt(x2, y2); } Rechteck(Punkt pp1, Punkt pp2){ super(); p1 = pp1; p2 = pp2; } void verschieben (int dx, int dy) { p1.verschieben(dx, dy); p2.verschieben(dx, dy); } double umfang() { double seite1 = Math.abs(p1.getX() - p2.getX()); double seite2 = Math.abs(p1.getY() - p2.getY()); return 2 * (seite1 + seite2); } double flaeche() { double seite1 = Math.abs(p1.getX() - p2.getX()); double seite2 = Math.abs(p1.getY() - p2.getY()); return seite1 * seite2; } public String toString(){ return "Rechteck 1. Punkt: " + p1.toString() + " 2. Punkt: " + p2.toString(); } } class Linie extends GeoKlasse { private Punkt p1, p2; Linie() {super(); p1 = new Punkt(); p2 = new Punkt();} Linie(int x1, int y1, int x2, int y2){ super(); p1 = new Punkt(x1, y1); p2 = new Punkt(x2, y2); } Linie(Punkt pp1, Punkt pp2){ super(); p1 = pp1; p2 = pp2; } void verschieben (int dx, int dy) { p1.verschieben(dx, dy); p2.verschieben(dx, dy); } void verschieben (int Delta) { verschieben(Delta, Delta); } double umfang() { double seite1 = Math.abs(p1.getX() - p2.getX()); double seite2 = Math.abs(p1.getY() - p2.getY()); return Math.sqrt(seite1*seite1 + seite2*seite2); } double flaeche() { return 0; } public String toString(){ return "Linie von " + p1.toString() + " bis " + p2.toString(); }; } class graLinie extends Linie { private boolean sichtbar = false; private int dicke = 1; private Color farbe = Color.black; graLinie() {super();} graLinie(int x1, int y1, int x2, int y2) { super(x1, y1, x2, y2); } graLinie(Punkt pp1, Punkt pp2) { super(pp1, pp2); } graLinie(Punkt pp1, Punkt pp2, boolean pS, int pD, Color pF) { this(pp1, pp2); sichtbar = pS; dicke = pD; farbe = pF; } void malen () { System.out.println(" Malen von Linie."); } void loeschen () { System.out.println(" Loeschen von Linie."); } void verschieben (int dx, int dy) { loeschen (); super.verschieben(dx, dy); malen (); } public String toString(){ String s1 = sichtbar ? " sichtbar " : " nicht sichtbar "; String s2 = " Dicke: " + dicke; String s3 = " Farbe: " + farbe; return super.toString() + "\n...gra:" + s1 + s2 + s3; }; }