Ich hab mir gerade nochmal Gedanken gemacht und es ist im Prinzip nicht schwer, da es mathematisch gesehen ja einfache symmetrische Linien sind.
Folgende Werte brauchst du initial:
- Tiefe des Tunierbaumes ($max_depth)
- Größe der Karte ($map_width, $map_height)
- Die Länge der horizontalen Linie (entweder fix, oder abhängig von der Breite und maximalen Tiefe): $length_horizontal
Weiterhin brauchst du alle möglichen Kombinationen von $dir_x (bool), $dir_y (bool), Flags die festlegen, in welche Richtung gezeichnet wird, sowie eine rekursive Funktion, die nach $max_depth abbricht.
Zunächst würde ich eine for-Schleife basteln, die verantwortlich dafür ist, dass alle 4 Linien ausgehend vom Finale gezeichnet werden. Du hast also einen Startpunkt, der Initial auf den Mittelpunkt der Karte festgelegt ist.
Ich lege fest, dass der Zeichner, der nach oben zeichnet, die Zeichnung der horizontalen Linie übernimmt (andernfalls würde sie doppelt gezeichnet), $y_dir = true.
Abhängig von deinem Punkt an dem du dich befindest, wie lang du $horizontal_length festgelegt hast und auf welchem Flag $x_dir festgelegt ist (links/rechts, also true/false) zeichnest du die erste Linie (oder auch nicht, falls $y_dir = false).
Ich gehe davon aus, dass du den Endpunkt des neuen Striches jeweils als neuen Startpunkt verwendest.
Das ganze wird dank der for-Schleife 4x ausgeführt, tatsächlich wurden zwei horizontale Linien gezeichnet, die aber in einander übergehen (Treffpunkt Mittelpunkt). Du schickst die Endpunkte in deine rekursive Funktion, zusammen mit $depth (initial = 1), $x_dir und $y_dir. Abhängig von $y_dir und dem neuen Punkt, werden nun 4 Linien der Höhe $map_height / ($depth * 4) in der Vertikalen gezeichnet. Sprich du hast die horizontale(n) Linie(n) des "Finales" um 4 vertikale Linien zu den 4 Halbfinalteams erweitert und zwar im ersten Schritt um die Länge von einem Viertel der gesamten Kartenhöhe. Die Endpunkte der Linien ergeben wieder $point. So und jetzt beginnt die Rekursion, mit $depth + 1 und dem neuen Startpunkt. Du schickst alle wieder los und lässt sie horizontale Linie zeichnen (wenn $y_dir = true, wie vorher) und danach wieder den vertikalen Strich mit der $map_height / ($depth * 4), also nurnoch einem Achtel der Höhe der Karte, da $depth ja jetzt = 2 ist. Und so weiter, bis $max_depth, die Abbruchbedingung getroffen ist.
Du hast dir alle Positionen der horizontalen Striche gemerkt und kannst jetzt mit der Beschriftung anfangen (daher auch die fixe Breite der horizontalen Linien).
Der Rest (auf deiner Zeichnung die linken und rechten Boxen sowie die Texte oben und unten sind dann ja noch ein Klaks, abhängig von $map_height und $map_width).
Hoffe das war soweit verständlich.
__________________ "Nuschel ich?" - "Was?"
Geändert von Chriz (07.05.2009 um 21:07 Uhr).
|