/* * Polygon Klasse * v.01 * desc: Festlegen von Polygonpunkten, Verschieben von Polygonpunkten, Zeichnen des gesamten Polygons * * Konstruktor Parameter: * keine * * Methoden * * * * * * * * * */ class Polygon { ArrayList polyPoints = new ArrayList(); // Liste aller Punkte des Polygons boolean closedPoly; // Ist das Polygon geschlossen oder offen? //ArrayList polyPointsTransl = new ArrayList(); /* * CLASS KONSTRUKTOR */ Polygon() { closedPoly = false; // Polygon zu Beginn offen } /* * Methode: Polygon.addPoint(float posX, float posY) * Desc: Polygoneckpunkt hinzufügen * * Params: * posX - X-Wert * posY - Y-Wert */ void addPoint(float posX, float posY) { if (closedPoly == false) { Vec myNewPoint = new Vec(posX, posY); polyPoints.add(myNewPoint); } } /* * Methode: Polygon.drawPoly() * Desc: gibt offenes/geshlossenes Polygon am Bildschirm aus * * Params: - */ void drawPoly() { if (polyPoints.size() >= 1) // Linie zeichnen falls mehr als 1 Punkt { Vec lPoint = (Vec) polyPoints.get( (polyPoints.size()-1) ); // vorheriger Punkt if (closedPoly == false) // POLYGON OFFEN { stroke(cHighlight1); line(lPoint.getX(), lPoint.getY(), mouseX, mouseY); // Mouselinie zeichnen for (int i=0; i < (polyPoints.size()-1); i++) // restliche Linien des Polygons zeichnen { Vec cPoint = (Vec) polyPoints.get(i); // Punkt i Vec nPoint = (Vec) polyPoints.get(i+1); // auf Punkt i folgender Punkt stroke(cNormal1); line(cPoint.getX(), cPoint.getY(), nPoint.getX(), nPoint.getY() ); // Linie Punkt i nach Punkt i+1 zeichnen } } if (closedPoly == true) // POLYGON GESCHLOSSEN { for (int i=0; i < (polyPoints.size()-1); i++) // alle Linien des Polygons zeichnen { //println(i); Vec cPoint = (Vec) polyPoints.get(i); // Punkt i Vec nPoint = (Vec) polyPoints.get(i+1); // auf Punkt i folgender Punkt stroke(cNormal2); line(cPoint.getX(), cPoint.getY(), nPoint.getX(), nPoint.getY() ); // Linie Punkt i nach Punkt i+1 zeichnen //println("Points " + cPoint.getX() + " " + cPoint.getY() + " " + nPoint.getX() + " " + nPoint.getY() ); } Vec lastPoint = (Vec) polyPoints.get(polyPoints.size()-1); // letzter Punkt Vec firstPoint = (Vec) polyPoints.get(0); // erster Punkt stroke(cNormal2); line(lastPoint.getX(), lastPoint.getY(), firstPoint.getX(), firstPoint.getY() ); // zeichne Linie letzter Punkt zum ersten Punkt //println("class_poly sEM: "+setEmitterMode); //initSetEmitterMode(); //println("class_poly sEM: "+setEmitterMode); } } } /* * Methode: Polygon.closePoly() * Desc: setzt Polygonstatus auf geschlossen * * Params: - */ void closePoly() { closedPoly = true; // Schalter für Klasse } /* * Methode: Polygon.getPt(int index) * Desc: gibt Vektorpunkt zurück * * Params: * index - Index der Polygonecke */ Vec getPt(int index) { return (Vec) polyPoints.get(index); } /* * Methode: Polygon.movePoint(); * Desc: verschiebt einen Punkt des fertigen Polygons * * Params: * newX - neue X-Koordinate * newY - neue Y-Koordinate * index - Index des zu verschiebenden Punktes */ void movePoint(float newX, float newY, int index) { Vec newPos = new Vec(newX, newY); polyPoints.set(index, newPos); } /* * Methode: Polygon.listPoints() * Desc: gibt alle Punkte eines Polygons in die Konsole aus * * Params: - */ void listPoints() { println("start of polygon -------------------------------------------"); for (int i=0; i < polyPoints.size(); i++) { Vec cPoint = (Vec) polyPoints.get(i); println("Punkt " + i + " X: " + cPoint.getX() + " Y: " + cPoint.getY()); } println("--------------------------------------------- end of polygon"); } /* * Methode: Polygon.areaPoly() * Desc: gibt Größe des Polygons zurück * * Params: - */ float areaPoly() { float area = 0; int i, j, n = polyPoints.size(); for (i = 0; i < n; i++) { j = (i + 1) % n; Vec a = new Vec((Vec)polyPoints.get(i)); Vec b = new Vec((Vec)polyPoints.get(j)); area += a.getX() * b.getY(); area -= b.getX() * a.getY(); } area = abs(area/2.0); return area; } }