/* Klasse Branch (Baum) Version 1.0 Eine Branch beschreibt einen Baumtyp in Form von Listen mit Edges (Bauplan). Konstruktor Parameter: int type = Baumtyp int branchLength = Teilungsgrad Globale Parameter: ArrayList printList // Liste enthŠlt alle Kanten des Baumes: Entspricht dem Bauplan um Baum zu zeichnen ArrayList pointList // Liste EnthŠlt alle Punkte bei den Gabelungen ArrayList endingList // Liste enthŠlt alle Kanten die fźr jeweiligen Blatttyp gebraucht wird ArrayList constructList // Liste EnthŠlt Kanten, die noch geteilt werden dźrfen Methoden: makeOtherEdges(Edge startEdge) = Baum wird generiert, wird mit erster Edge (Stamm) gestartet. Abfźllen der Listen: printList = gesammter Bauplan des Baumes in Form von Edges gespeichert pointList = enthŠlt Punkte an den Stellen der BlŠtter endingList = enthŠlt Edges der BlŠtterzweige constructList = ist nur wŠhrend dem Generieren von Bedeutung, enthŠlt Kannten die geteilt werden kšnnen źber diese Liste wird der Baumtyp gesteuert. */ class Branch { ArrayList constructList = new ArrayList(); // Liste EnthŠlt Kanten, die noch geteilt werden dźrfen ArrayList pointList = new ArrayList(); // Liste EnthŠlt alle Punkte bei den Gabelungen ArrayList printList = new ArrayList(); // Liste enthŠlt alle Kanten des Baumes: Entspricht dem Bauplan um Baum zu zeichnen ArrayList endingList = new ArrayList(); // Liste enthŠlt alle Kanten die fźr jeweiligen Blatttyp gebraucht wird int type; int branchLength; Branch(int numberEdge, int branchType) { branchLength = numberEdge; type = branchType; } //-----------Erstellen der Branch Listen void makeOtherEdges(Edge startEdge) // Listen aller Kanten eines Baumes werden nach aufgeruftem Branchtyp erstellt. { Edge edge1 = startEdge; constructList.add(edge1); // Liste EnthŠlt Kanten, die noch geteilt werden dźrfen printList.add(edge1); // Liste enthŠlt alle Kanten des Baumes: Entspricht dem Bauplan um Baum zu zeichnen if (type ==1) // Type 1 ruft Methode fźr einmaliges Teilen auf { pointList.add(edge1.point2); float reduceFactor=1; for (int i = 0; i < constructList.size(); i++) { edge1 = (Edge)constructList.get(i); edge1.makeNewEdge(0.8, reduceFactor*d, angle); reduceFactor = reduceFactor * verkuerzung; } } if ( type == 2) // Typ 2 ruft Methode fźr zweimaliges Teilen auf { //pointList.add(edge1.point2); float reduceFactor=1; for (int i=0; i < branchLength; i++) // Grad der €ste (entspricht der Anzahl Knicke zu Stamm zurźck) { if (i < constructList.size()) // es wird jedoch nur eine der beiden neuen Kannten weitergeteilt { edge1 = (Edge)constructList.get(i); edge1.divide(0.7,reduceFactor *d,angle); reduceFactor = reduceFactor * verkuerzung; } } if (endPunktVariante == 1) { edge1.ending(PI/6); } if (endPunktVariante == 2) { edge1.ending2(punktRadius/2); } } if (type == 3) // Typ 3 ruft Methode fźr zweimaliges Teilen auf { pointList.add(edge1.point2); float reduceFactor=1; for (int i=0; i < branchLength; i++) // Grad des €ste (entspricht der Anzahl Knicke zum Stamm zurźck) { if (i < constructList.size()) // es werden zwei Kannten der printList zweigeteilt { edge1 = (Edge)constructList.get(i); edge1.divide(0.7,reduceFactor *d,angle); reduceFactor = reduceFactor * verkuerzung; } if (i < constructList.size()){ edge1 = (Edge)constructList.get(i); edge1.divide(0.7,reduceFactor *d, angle); } } if (endPunktVariante == 1) { edge1.ending(PI/6); } if (endPunktVariante == 2) { edge1.ending2(punktRadius/2); } } if ( type ==4 || type ==5) // Typ 4 und 5 rufen Methoden fźr zweimaliges Teilen auf { pointList.add(edge1.point2); float reduceFactor=1; for (int i=0; i < branchLength; i++) // Grad des €ste (entspricht bei TYP 5 der Anzahl Knicke zum Stamm zurźck) { int ll = constructList.size(); // Pro Teilungsdurchgang werden so viele Kannten geteilt wie die constructList zu BEGINN Kannten hat for (int j = 0; j < ll; j++) { float angle2 = random(angle,angle+PI/16); if (type == 4) { edge1 = (Edge)constructList.get(j); // Typ 4 nimmt immer an einer Fortlaufenden Stelle der constructList eine Kannte zum teilen } // unregelmŠssiges wachstum, €ste der schon geteilten Kannte kšnnen weitergeteilt werden else { // Hirarchie von Grad der €ste wird gebrochen edge1 = (Edge)constructList.get(0); // Typ 5 nimmt immer an der ersten Stelle der constructList eine Kannte zum teilen } // regelmŠssiges wachstum edge1.divide(0.7,reduceFactor*d, angle2); reduceFactor = reduceFactor * (verkuerzung+0.04); } } if (endPunktVariante == 1) { edge1.ending(PI/6); } if (endPunktVariante == 2) { edge1.ending2(punktRadius/2); } } } }