From da7761a4269b0f0d277be02fa1b5cc82e35295f4 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Thu, 26 Nov 2015 07:21:47 +0000 Subject: EiP H6-1 --- ws2015/eip/blaetter/06/Polygon.java | 106 ++++++++++++++++++++++++++++++++++++ ws2015/eip/blaetter/06/Test.java | 40 ++++++++++++++ ws2015/eip/blaetter/06/manifest | 1 + 3 files changed, 147 insertions(+) create mode 100644 ws2015/eip/blaetter/06/Polygon.java create mode 100644 ws2015/eip/blaetter/06/Test.java create mode 100644 ws2015/eip/blaetter/06/manifest (limited to 'ws2015') diff --git a/ws2015/eip/blaetter/06/Polygon.java b/ws2015/eip/blaetter/06/Polygon.java new file mode 100644 index 0000000..461fcc6 --- /dev/null +++ b/ws2015/eip/blaetter/06/Polygon.java @@ -0,0 +1,106 @@ +import java.util.ArrayList; +import java.util.Arrays; + +import java.util.List; +import java.util.ListIterator; + +import java.util.Collection; + +import java.awt.Point; + +import gameoflifetest.GraphicsWindow; + +class Polygon { + private final List points; + + public Polygon (Position[] pointsPrime) + { + points = Arrays.asList(pointsPrime); + } + + public Polygon (Collection pointsPrime) + { + points = new ArrayList(pointsPrime); + } + + public Polygon translate (int dx, int dy) + { + ListIterator it = points.listIterator(); + ArrayList translated = new ArrayList(); + while (it.hasNext()) + translated.add(it.next().translate(dx, dy)); + return new Polygon(translated); + } + + public Polygon erweitere (Position pos) + { + ArrayList extended = new ArrayList(points); + extended.add(pos); + return new Polygon(extended); + } + + public Polygon reduziere (int n) + { + if (n == 0) + return new Polygon(new ArrayList()); + + List reduced = new ArrayList(points); + + int c = 0; + + for (int i = 0; i < points.size(); i++) + { + if (i % n == 1) + { + reduced.remove(i - c); + c++; + } + } + + return new Polygon(reduced); + } + + public boolean istGleichZu(Polygon other) + { + ListIterator itThis = points.listIterator(); + ListIterator itOther = other.points.listIterator(); + + while (itThis.hasNext() && itOther.hasNext()) + if (! itThis.next().istGleichZu(itOther.next())) + return false; + + if (itThis.hasNext() || itOther.hasNext()) + return false; + + return true; + } + + public double berechneFlaeche() + { + if (points.size() < 3) + return 0; + + double area = 0; + + for (int i = 0; i <= points.size(); i++) + { + Position r0 = points.get(i % points.size()); + Position r1 = points.get((i + 1) % points.size()); + + area += 0.5 * ((r0.getX() + r1.getX()) * (r1.getY() - r0.getY())); + } + + return area; + } + + public void zeichneDich (GraphicsWindow gw) + { + for (int i = 0; i <= points.size(); i++) + { + Position r0 = points.get(i % points.size()); + Position r1 = points.get((i + 1) % points.size()); + + gw.drawLine(new Point(r0.getX(), r0.getY()), new Point(r1.getX(), r1.getY())); + } + } +} diff --git a/ws2015/eip/blaetter/06/Test.java b/ws2015/eip/blaetter/06/Test.java new file mode 100644 index 0000000..c8232a2 --- /dev/null +++ b/ws2015/eip/blaetter/06/Test.java @@ -0,0 +1,40 @@ +import gameoflifetest.GraphicsWindow; + +class Test { + public static void main (String[] args) + { + GraphicsWindow gw = new GraphicsWindow(); + + Position[] points = { new Position(10, 10) + , new Position(20, 10) + , new Position(30, 10) + , new Position(30, 20) + , new Position(20, 20) + , new Position(10, 20) + }; + + Polygon p = new Polygon(points); + + p.zeichneDich(gw); + gw.mouseClick(); + + p = p.translate(10, 10); + gw.clear(); + p.zeichneDich(gw); + gw.mouseClick(); + + p = p.erweitere(new Position(5, 20)); + gw.clear(); + p.zeichneDich(gw); + gw.mouseClick(); + + p = p.reduziere(2); + gw.clear(); + p.zeichneDich(gw); + gw.mouseClick(); + + System.out.format("%.2f\n", p.berechneFlaeche()); + + System.exit(0); + } +} diff --git a/ws2015/eip/blaetter/06/manifest b/ws2015/eip/blaetter/06/manifest new file mode 100644 index 0000000..f55b77f --- /dev/null +++ b/ws2015/eip/blaetter/06/manifest @@ -0,0 +1 @@ +Polygon.java \ No newline at end of file -- cgit v1.2.3