Hallo, im Anhang eine fraktale Darstellung aus Fünfecken. Ich würde gerne einen Algorithmus schreiben, der diese Zeichnung mit vorgegebener Tiefe generieren kann. Die Ausgabe soll auf dem Bildschirm erfolgen, die einzelnen Fünfecke sollen aus Linien aufgebaut werden. Also brauche ich im Prinzip einen Algorithmus, der jeweils die neuen Eckpunkte errechnet, die dann per Linien verbunden werden. Vermutlich müsste man es irgendwie als Vektorgrafik proggen, habe nur keine rechte Idee, wie. Kennt sich hier jemand besser mit der Materie aus oder hat jemand eine Idee, wie man das Prinzip auf (nach Möglichkeit) einfache Weise umsetzen kann?
such mal nach Processing. da lässt sich sowas relaiv gut machen
Vlad Tepesch schrieb: > such mal nach Processing. > da lässt sich sowas relaiv gut machen Danke für den Hinweis, klingt interessant! Ich würde es aber lieber (auf wenn möglich einfache Weise) per Hand machen, also indem die neuen Punkte berechnet werden. (auch aus Lerngründen)
Ich habe ein ähnliches Beispiel in Postscript. Das könntest du entsprechend deinen Wünschen umgestalten.
Processing schränkt dich da in keinerlei Weise ein. Du kannst Pixel direkt setzen oder mit Linien arbeiten. Vektorgrafik mit skalieren, rotieren und verschieben ist auch kein Problem. Es hängt von dir ab, wie leidensfähig du bist. :-) Hier http://www.openprocessing.org/browse/?viewBy=most&filter=favorited kannst Du die Appetit holen und erkunden, was andere Leute mit Processing anstellen. Grüsse
Abdul K. schrieb: > Ich habe ein ähnliches Beispiel in Postscript. Das könntest du > entsprechend deinen Wünschen umgestalten. wie öffnet man postscript-dateien auf einem win-rechner (wird bei mir als unbekannte datei angezeigt)?
entwder mit ghostscript, oder mit PDFCreator zB
Dormann schrieb: > im Anhang eine fraktale Darstellung aus Fünfecken. Bist du sicher? Der innere Teil zumindest ist nicht selbstähnlich zum Äusseren. Dann gibt es aber womöglich keinen Algorithmus. Gruss Reinhard
http://hal.archives-ouvertes.fr/docs/00/36/79/72/PDF/The_Fibonacci_word_fractal.pdf hier findet man im Kapitel 8.2 eine ähnliche Figur
@TO ich würde zuerst mal versuchen das "prizip" zu verstehen vorgabe scheint ein 5 eck zu sein (also 5 punkte, jeweils x und y) danach werden eine bestimmte anzahl (wieviel? 5, 10) fünfecke erstellt mit bestimmten vorgaben (mittelpunkt/ecke/ausrichtung) vielleicht passiert auch ganz was anderes (aber das willst ja hoffentlich nicht vorgekaut bekommen? du willst ja was lernen) bis hier hin, hat das genau NIX mit programmieren zu tun solltest du dann soweit gekommen sein kannst du anfangen programmieren dazu musst du aber erst die grundlagen allgemein und der programmiersprache kennen DAS wiederum hat mit obigem problem nichts zu tun.. solltest du dann soweit gekommen sein kannst du beides kombinieren (ist in dem fall ja recht einfach: eine funktion die sich rekursiv aufruft..)
Reinhard Kern schrieb: > Bist du sicher? Der innere Teil zumindest ist nicht selbstähnlich zum > Äusseren. Doch ist er. Jedes Fünfeck hat an allen noch freien Ecken ein neues Fünfeck. Die beiden anliegenden Kanten des neuen Fünfecks sind die Fortführung der Kanten des alten Fünfecks. Das interssante ist die Länge der Kanten der neuen Fünfecke. Die ist so, daß es genau mit dem nächsten Enkel-Fünfeck ausgeht daß sich die Kinder und Enkel berühren. Der TO braucht auf jeden Fall erst mal die Erzeugungsvorschrift, dann kann er sich Gedanken zur Programmierung machen.
Udo Schmitt schrieb: > Reinhard Kern schrieb: >> Bist du sicher? Der innere Teil zumindest ist nicht selbstähnlich zum >> Äusseren. > > Doch ist er. Nein ist er nicht. Das innerste Fünfeck ist eine Ausnahme, es wird von fünf kleineren Fünfecken berührt. Alle anderen werden von vier kleineren und einem größeren berührt.
mh schrieb: > Nein ist er nicht. Das innerste Fünfeck ist eine Ausnahme, es wird von > fünf kleineren Fünfecken berührt. Alle anderen werden von vier kleineren > und einem größeren berührt. Ist es doch, die Enkel haben zum Beispiel nur 2 neue Kinder. Es werden alle freien Ecken mit Kinden belegt wenn es mindestens eine nebenliegende Ecke gibt an die ein gleich großes Kind passt.
richie schrieb: > Abdul K. schrieb: >> Ich habe ein ähnliches Beispiel in Postscript. Das könntest du >> entsprechend deinen Wünschen umgestalten. > > wie öffnet man postscript-dateien auf einem win-rechner (wird bei mir > als unbekannte datei angezeigt)? Ich benutze IrfanView und dort habe ich Ghostscript als Postscript-Interpreter eingestellt. Dann muß man nur noch das PS-File mit IrfanView öffnen und warten. PS kann man mit jedem Texteditor bearbeiten und beim Ausführen stürzt der Rechner auch sicher nicht ab. Oder einfach an einen PS-Drucker schicken. Manche pdf-Reader können auch PS anzeigen.
Udo Schmitt schrieb: > Ist es doch, die Enkel haben zum Beispiel nur 2 neue Kinder. WENN du mal genau hinschaust: die Figur hat nur eine Symmetrieachse, nämlich die Senkrechte. Die auf den ersten Blick im Kreis angeordneten immer kleiner werden Figuren sind nicht rotationssymmetrisch angeordnet, das sieht nur bei unscharfem Hinsehen so aus. Und WENN man dann noch nachdenkt, kann man drauf kommen, dass die Ebene zwar mit 5Ecken gepflastert werden kann, aber eben nicht regelmässig, frag Penrose. Die Zeichnung ist eine raffinierte optische Täuschung, indem sie Selbstähnlichkeit nur vortäuscht (zumindest strikte Selbstähnlichkeit im mathematischen Sinn). Gruss Reinhard
Hallo Reinhard Reinhard Kern schrieb: > Und WENN man dann noch nachdenkt, kann man drauf kommen, dass die Ebene > zwar mit 5Ecken gepflastert werden kann, aber eben nicht regelmässig, > frag Penrose. Sorry Penrose ist mir zu hoch, ich verstehe auch nicht was seine 5 eck Kachelung der Ebene damit zu tun hat. Ausserdem ist selbstähnlich nicht gleich regelmäßig. Für mich sieht das eindeutig aus als wäre das eine iterierende Vorschrift. Reinhard Kern schrieb: > WENN du mal genau hinschaust: die Figur hat nur eine Symmetrieachse, > nämlich die Senkrechte. > ... > Die Zeichnung ist eine raffinierte optische Täuschung, indem sie > Selbstähnlichkeit vortäuscht (zumindest strikte Selbstähnlichkeit im > mathematischen Sinn). Da bin ich mathematisch zu weit raus, aber die Mandelbrotmenge hat auch nur eine Symmetrieachse. Außerdem sehe ich nicht daß diese Menge nicht 5 Symmetrieachsen hätte. Auch die darin gebildeten Geraden und Dreiecke sehen soweit ich das anhand des Bildes beurteilen kann symmetrisch aus. Gruß Udo
> dass die Ebene >zwar mit 5Ecken gepflastert werden kann, aber eben nicht regelmässig, >frag Penrose. ist es eh nicht (die weißen flächen sind ja keine regelm. 5ecke) ich "sehe" auch 5 symetrie achsen, (kann nicht erkenne wo das was nicht passt..)
Reinhard Kern schrieb: > Die Zeichnung ist eine raffinierte optische Täuschung, indem sie > Selbstähnlichkeit nur vortäuscht (zumindest strikte Selbstähnlichkeit im > mathematischen Sinn). Ich denke hier geht es doch gar nicht um Selbstähnlichkeit sondern um eine rekursive Generiervorschrift, die ähnlich wie die Sierpinsky-Dreiecke einen Fraktal erzeugen. Die Frage der Flächenkachelung stellt sich dabei überhaupt nicht. Die Generiervorschrift ist meines Erachtens relativ simpel (mit Ausnahme des allerersten 5-Ecks) * Nimm ein 5-Eck, nummeriere die Eckpunkte durch. * Eckpunkt 0 bleibt frei * Eckpunkte 1, 2, 3: Hänge daran ein weiteres 5-Eck an, das so ausgerichtet ist, dass * es mit seinem Punkt 0 an diesem Eckpunkt hängt * denselben Umlaufsinn in der Nummerierung hat * sein Mittelpunkt auf einer Geraden mit dem Eckpunkt und dem Mittelpunkt des gerade untersuchten 5-Ecks hat * Eckpunkt 4 bleibt frei * Die angehängten 5-Ecke sind um einen bestimmten Faktor kleiner als das 5-Eck an dem sie angehängt sind. Den genauen Verkleinerungsfaktor und ob der konstant ist ... das müsste man näher untersuchen, aus dem Bauch raus kann ich dazu nichts sagen. Aber im Grunde müsste das die Berechnungsvorschrift sein.
Na ja, Penrose ist es nicht, da das Bild nicht durchgehend mit ein und dem selben Flächenelement gefüllt ist. Außerdem gibt es 5 Spiegelebenen und eine 5-zählige Drehachse. Ob diese Erkenntnis hilft.....
Hallo und vielen Dank für die vielen Antworten! Ich gehe davon aus, das die jeweils kleinere Fünfeckgeneration um den Goldenen Schnitt kleiner ist als der/die Vorgänger. Danke Karl Heinz für die Analyse! Ich will mal klein anfangen und zuerst ein großes Fünfeck generieren, an dessen Kanten sich die fünf "Kinder " befinden. Würde es so machen: Die fünf Eckpunkte (X-Y-Koordinaten) des ersten 5-Ecks festlegen. Das sind auch die "Berühr"-Eckpunkte für die fünf kleineren 5-Ecke. Dann wird es auch schon knifflig, weil die kleineren 5-Ecke ja auch den richtigen Drehwinkel besitzen müssen. Die nächste Frage wäre also: Wie dreht man ein Fünfeck (an einer seiner Ecken) in einer Ebene und was bestimmt den Drehwinkel? Nehme mal an, hier geht es mit Vektorrechnung weiter.
>Ich gehe davon aus, das die jeweils kleinere Fünfeckgeneration um den >Goldenen Schnitt kleiner ist als der/die Vorgänger. DAS wäre ziemlich "mysteriös" (könnte aber sein) bei mir ist Mathe leider schon zu lage her, dass ich in der lage wäre dass (schnell) zu ermitteln (man müsste vermutlich ein paar Längenverhältnisse gleich setzen (a/b = c/b) und irgendwie mit cos und sin usw. damit, also cos() und sin(), kannst übrigens auch deinen punkt drehen..
Dormann schrieb: > Die nächste Frage wäre also: > > Wie dreht man ein Fünfeck (an einer seiner Ecken) in einer Ebene und was > bestimmt den Drehwinkel? > > Nehme mal an, hier geht es mit Vektorrechnung weiter. :-) Im wesentlichen wirds wohl darauf hinauslaufen. Ich würde es so machen: Die 5-Ecke sind nett, aber nicht der wesentliche Teil. Entscheidend ist: Wo ist der Mittelpunkt. Von diesem ausgehend verteilen sich die Mitelpunkte der 'umgebenden' Figuren auf einem Kreis mit einem bestimmten Radius und da das ganze 5-strahlig ist, sind die 'Kindfiguren' auf diesem Kreis jeweils 360/5 Grad winkelmässig voneinander entfernt. Mit diesen neuen Mittelpunkten ist eine Orientierung verknüpft, was uns von Vektoren zu Matrizen bringt (Punkt + Orientierung), was den Vorteil hat, dass damit dann die ganze Hierarchie leicht zu modellieren ist. Dazu dann noch eine Funktion, die rund um so Mittel-'Punkt' ein 5-Eck zeichnen kann und .... im wesentlichen müsste es das dann schon gewesen sein. (rund um zeichnen == 5 Eck in Standardlage, jeden Punkt mit der Matrix multiplizieren und die erhaltenen Punkte miteinander verbinden)
Karl Heinz Buchegger schrieb: > Ich würde es so machen: > Die 5-Ecke sind nett, aber nicht der wesentliche Teil. Entscheidend ist: > Wo ist der Mittelpunkt. Hallo Karl Heinz, ich würde dir hier widersprechen. Wesentlich sind nur die 5 Ecken. Du hast symmetrische 5 Ecke mit bekannter Kantenlänge und Winkel. Die ersten beien Kanten der Kinder sind die verlängerten Kanten des Eltern 5-Ecks am Berührpunkt. Dadurch ist das 5-Eck schon eindeutig bestimmt. Da noch ein Mittelpunkt auszurechen führt überhaupt nicht weiter und bringt keinerlei Vorteil. Die Kantenlänge als goldenen Schnitt zu vermuten ist -nun ja- eine Vermutung, aber mehr nicht. Wenn man sich das anschaut sieht man, daß zwischen 2 Kinder genau ein Enkel passen muss. Mit etwas Geometrie sollte sich das Kantenlängenverhältnis zweier Generationen damit errechnen lassen. Auch bei der Generiervorschrift bin ich nicht bei dir. Schau dir die 3. Generation an (Zentrale 5-Eck ist 1. Generation). Die haben kein Kind an dem nach innen gerichteten Eck. Sie haben überhaupt nur 2 Kinder außer du sagst die anderen Kinder sind durch die anliegenden größeren Eltern verdeckt. Ich glaube besser wäre hier zu sagen es gibt Kinder an jeder freien Ecke sofern eine benachbarte Ecke existiert die auch frei ist.
Dormann schrieb: > Dann wird es auch schon knifflig, weil die kleineren 5-Ecke ja auch den > richtigen Drehwinkel besitzen müssen. warum, die anliegenden Kinder sind jeweils nur einmal horizontal gespiegelt
Vlad Tepesch schrieb: > Dormann schrieb: >> Dann wird es auch schon knifflig, weil die kleineren 5-Ecke ja auch den >> richtigen Drehwinkel besitzen müssen. > > warum, die anliegenden Kinder sind jeweils nur einmal horizontal > gespiegelt Noch einfacher: Wie schon 2 mal geschrieben: Udo Schmitt schrieb: > Die ersten beien Kanten der Kinder sind die verlängerten Kanten des > Eltern 5-Ecks am Berührpunkt. Dadurch ist das 5-Eck schon eindeutig > bestimmt.
Udo Schmitt schrieb: > Die Kantenlänge als goldenen Schnitt zu vermuten ist -nun ja- eine > Vermutung, aber mehr nicht. Das ist keine Vermutung, sondern ist so, (1+sqr(5))/2 Udo Schmitt schrieb: > Die ersten beien Kanten der Kinder sind die verlängerten Kanten des > Eltern 5-Ecks am Berührpunkt. Das hilft Dir gar nichts, wenn Du die Größe der Kinder nicht kennst. Und solange Du den Faktor als "mysteriös" bezeichnest, kann Du ihn nicht als gegeben betrachten, damit fehlt Dir auch jeglicher Ansatz zur weiteren Konstruktion. Sämtliche Fünfecke mit Ausnahme des Ersten sind an der Spitze gespiegelt und um den Faktor des goldenen Schnitts verkleinert. Wenn die Kante eines zu spiegelnden Fünfeckes auf der Kante eines bereits bestehenden Fünfeckes zu liegen kommt, wird dieses ausgelassen.
MWS schrieb: > Und > solange Du den Faktor als "mysteriös" bezeichnest, kann Du ihn nicht als > gegeben betrachten, damit fehlt Dir auch jeglicher Ansatz zur weiteren > Konstruktion. Ich habe ihn nicht als mysteriös bezeichnet sondern klar gesagt daß er durch die Konstruktion daß ein Enkel genau zwischen 2 Kinder passt gegeben und konstant ist! Lern lesen! Und woher hast du den goldenen Schnitt? Göttliche Fügung oder errechnet?
Udo Schmitt schrieb: > Ich habe ihn nicht als mysteriös bezeichnet Ja, das stimmt, falsch zitiert, kam von hier: Robert L. schrieb: > DAS wäre ziemlich "mysteriös" (könnte aber sein) Du hattest das hier geschrieben: > Die Kantenlänge als goldenen Schnitt zu vermuten ist -nun ja- eine > Vermutung, aber mehr nicht. Und ich hab's nachvollzogen, dass es per goldenen Schnitt das richtige Ergebnis gibt. > Wenn man sich das anschaut sieht man, daß zwischen 2 Kinder genau ein > Enkel passen muss. Mit etwas Geometrie sollte sich das ... Das ist wischi-waschi und bringt niemanden weiter. Dass die reinpassen müssen ist klar, aber daraus ergibt sich keine Berechnungsvorschrift, denn es existieren mehrere Unbekannten. Die Größe der Kinder ist nicht gegeben, und damit ist auch die Größe der Enkel veränderlich. > Mit etwas Geometrie sollte sich das > Kantenlängenverhältnis zweier Generationen damit errechnen lassen. Da wirst Du gar nix errechnen, wenn Du keine als sicher bekannte Größe hast. Aber probier's ruhig mal. > Und woher hast du den goldenen Schnitt? Der ist nachzulesen, aber das sollte doch jemand wie Du wissen, der Anderen rät: > Lern lesen! Also versuch's mal selbst damit.
MWS schrieb: > Das ist wischi-waschi und bringt niemanden weiter. Dass die reinpassen > müssen ist klar, aber daraus ergibt sich keine Berechnungsvorschrift, > denn es existieren mehrere Unbekannten. Die Größe der Kinder ist nicht > gegeben, und damit ist auch die Größe der Enkel veränderlich. > >> Mit etwas Geometrie sollte sich das >> Kantenlängenverhältnis zweier Generationen damit errechnen lassen. > >Da wirst Du gar nix errechnen, wenn Du keine als sicher bekannte Größe >hast. Aber probier's ruhig mal. Das ist Blödsinn, du hast eine definierte geometrische Anordnung mit bekannten Winkeln. Die Streckenlänge hast du nicht aber das Verhältnis der Strecken ist deine einzige Unbekannte da die Anfangslänge völlig irrelevant ist. Ist ein geometrisches Problem mit einer Unbekannten also lösbar. Ausrechnen darfst du es selbst als Übung!
Udo Schmitt schrieb: > Das ist Blödsinn, du hast eine definierte geometrische Anordnung mit > bekannten Winkeln. Die Streckenänge hast du nicht aber das Verhältnis > der Strecken ist deine einzige Unbekannte da die Anfangslänge völlig > irrelevant ist. > Ist ein geometrisches Problem mit einer Unbekannten also lösbar. Im Gegensatz zu Dir habe ich einen konkreten Lösungsvorschlag gemacht der sich umsetzen lässt, ich bin also nichts schuldig geblieben. > Ist ein geometrisches Problem mit einer Unbekannten also lösbar. > Ausrechnen darfst du es selbst als Übung! LOL, Du selber kannst es nicht, aber forderst Andere dazu auf. Hast Du Erfahrung damit, dass sich dann Doofe finden ? :D Also los, wenn Du's behauptest, dann beleg' doch auch, dass Du es drauf hast. Der TO wird dir auch dankbar sein, denn mit Deiner heißen Luft allein wird er sein Problem nicht lösen können.
Das Problem ist interessant zu lösen. Ich finde die allgemeine Rekursion (noch) nicht, wie die Kind-5-Ecke gedreht werden müssen, damit die Ecknummerierung die Kachelung ergibt. > Hallo Karl Heinz, > ich würde dir hier widersprechen. Wesentlich sind nur die 5 Ecken. Die Ecken brauchst du nur zum Zeichnen. Für die Rekursion, die die Kachelung ergibt sind sie unerheblich. Und am einfchsten ist es, bei solchen Figuren den lokalen 0-Punkt ins Zentrum des Umkreismittelpunktes zu legen. Alles andere ist nur: wie muss die jeweilige Kindfigur verschoben und verdreht werden. Und das ist ganz einfache Matrixalgebra. Ob ich dann rund um diesen Punkt 5-Ecke oder Teapots male ist völlig wurscht. Im Moment hänge ich daran, in welcher Rekursionsstufe, welche der 5 Kind-Elemente zu malen sind und wie die gedreht werden müssen, so dass sich eine Lage ergibt, so dass die Enkelkinder wieder richtig drann hängen. > Auch bei der Generiervorschrift bin ich nicht bei dir. Schau dir > die 3. Generation an (Zentrale 5-Eck ist 1. Generation). Die haben > kein Kind an dem nach innen gerichteten Eck. Sie haben überhaupt > nur 2 Kinder außer du sagst die anderen Kinder sind durch die > anliegenden größeren Eltern verdeckt. Das ist mir mitlerweile auch schon aufgefallen :-) (Im Gegensatz zu manch anderen hab ich mein Programm längst am laufen. Die Positionierung der Kinder ist kein Problem. Jetzt geht es nur noch um die rekursive Vorschrift, welche Kinder in welcher Stufe mit welcher Drehung zu positionieren sind)
Karl Heinz Buchegger schrieb: > Im Gegensatz zu manch anderen hab ich mein Programm längst am laufen. Warum hatte ich das jetzt schon vermutet :-) Ich werde wohl nicht dazu kommen, bzw. daheim habe ich ehrlich gesagt keine Lust mehr auch noch zu programmieren, da lese ich lieber ein Buch, gehe raus ins Grüne oder mach was mit der Familie. Viel Spass Udo
Udo Schmitt schrieb: > Karl Heinz Buchegger schrieb: >> Im Gegensatz zu manch anderen hab ich mein Programm längst am laufen. > > Warum hatte ich das jetzt schon vermutet :-) Für solch kleine 'Fingerübungen' bin ich immer zu haben. Das hält die grauen Zellen auf Trab. Ausserdem hab ich schon lang nichts mehr graphikmässig bei 0 aufgesetzt. Und das wurmt mich jetzt, dass ich die Rekursion nicht richtig hinkrieg bzw. aus dem Bild abgelesen hab :-)
Karl Heinz Buchegger schrieb: > Ich finde die allgemeine Rekursion (noch) nicht, wie die Kind-5-Ecke > gedreht werden müssen, damit die Ecknummerierung die Kachelung ergibt Was meinst Du damit, die reine programmtechnische Umsetzung oder die Regel, dass die dritte Kante des Kind-Fünfeckes nicht auf einer bestehenden Kante liegen darf ?
MWS schrieb: > Karl Heinz Buchegger schrieb: >> Ich finde die allgemeine Rekursion (noch) nicht, wie die Kind-5-Ecke >> gedreht werden müssen, damit die Ecknummerierung die Kachelung ergibt > > Was meinst Du damit, die reine programmtechnische Umsetzung oder die > Regel, Die Regel, sozusagen das Grundmuster programmtechnisch ist das Pipifax, soweit solltest du mich schon kennen :-)
Rechner gewechselt so siehts momentan aus. Die 5 Ecke sind nach Generation unteschiedlich eingefärbt. In jedem 5-Eck ist eine Markierung (sieht ein bischen aus wie ein Pfeil), der jeweils auf den Eckpunckt 0 zeigt. Und man sieht auch, wo das Problem liegt. Die Rekursionsregel für die dunkle kleine Generation ist eine andere wie die für die dunkle große Generation. Im Moment hab ich 2 unterschiedliche Generierregeln. Die möchte ich auch nicht aufgeben wenn es nicht sein muss. Aber ich denke mal, das wird mit 2 Regeln nichts, das müssen mehr sein. (Rückgriff auf andere 5-Ecke ala: Wenn ein anderer Teilzweig ein 5-Eck schon generiert hat, dann generier es nicht nochmal, ist nicht erlaubt. Das muss auch so gehen)
Ach mein Gott. Manchmal hilft es einfach nur darüber zu reden. Ich hab eine Idee. Wie konnte ich das nur übersehen. Die Unterschiedung ist nicht nach Generationen, sondern nach Anhängsel die ihrerseits wieder Kinder haben und nach 5-Ecken, die einfach nur "zwischen 2 5-Ecken sitzen". Sorry ist nicht leicht in Worte zu fassen.
Sieht auch nett aus, ist es aber noch nicht ganz :-)
MWS hatte da noch eine gute Idee. Evt. werden dort keine Kinder generiert wo ihre dem Berühpunkt gegenüberliegende Kante die Kante eines anderen 5 Ecks berühren würde.
Schau noch mal genau aufs Original. Da berühren sich überhaupt keine Kanten. Die 5-Ecke hängen nur über die Eckunkte zusammen.
Karl Heinz Buchegger schrieb: > Schau noch mal genau aufs Original. Da berühren sich überhaupt keine > Kanten. Die 5-Ecke hängen nur über die Eckunkte zusammen. Mein ich doch, überall wo die Ecken der Eltern frei sind würden die Kind-5ecke sonst an Kanten von Großeltern stoßen.
Karl Heinz Buchegger schrieb: > programmtechnisch ist das Pipifax, soweit solltest du mich schon kennen Hab' ich mir auch gedacht. Wahrscheinlich trag' ich jetzt Eulen nach Athen, aber vielleicht ist ja was Brauchbares dabei. Jeden Punkt am Fünfeck im Uhrzeigersinn durchgehen, die Kante Ecke(x) <-> Ecke(x+1) wird durch den goldenen Schnitt skaliert und an Ecke(x) um 180 Grad gedreht. An Ecke(x+1) wird die vorher skalierte Gerade um 72 nach rechts gedreht eingesetzt, bis man wieder an Ecke(0) ist. Ecke(1..3) werden in eine Liste für die nächste Iteration eingetragen. Ecke(0) ist der Ausgangspunkt und muss nicht in die Liste, Ecke(4) auch nicht, denn das zugehörige Fünfeck wird bereits über Ecke(1) erzeugt. Dann gäbe es noch die Ausnahmeregel für Fünfecke deren dritte Kante an bereits bestehenden Fünfecke anstößt. Auf Basis von Punkten und damit Vektoren dürften Listen für jeweils drei Generationen notwendig sein. Neue, aktuelle und vorherige Eckpunkte. Es müsste getestet werden, ob die jeweils dritte neue Kante an eine vorherige Kante anstößt. Im Fall dass alles Vektor-basierend bleiben soll, müsste wohl ein Algorithmus gefunden werden, um nicht die komplette Liste der ersten Generation absuchen zu müssen. Könnte sonst langsam werden. Schreibt man dagegen die als gut befundenen Fünfecke als gefüllte Fläche in einen Canvas, so würde ein Test reichen, ob ein Pixel außerhalb der dritten neuen Kante der Ecke(0) gegenüber gesetzt ist. Dann würden die Liste für die dritte Genration nicht benötigt. Meines Erachtens ist das schon die ganze Regel, mehr gibt's nicht. Karl Heinz Buchegger schrieb: > Schau noch mal genau aufs Original. Da berühren sich überhaupt keine > Kanten. Die 5-Ecke hängen nur über die Eckunkte zusammen. Deswegen ja auch die Regel, dass sobald sich Kanten berühren würden, das Fünfeck nicht gezeichnet werden darf.
Das ist ein sehr nettes Problem. Der Trick ist meines Erachtens, dass ganze nicht rekursiv sondern iterativ aufzubauen. Werde das sobald ich von der Arbeit heimkomme mal ausprobieren mir ist da schon ein regelmäßiges Muster mit einer Nebenbedingung aufgefallen...
@Karl Heinz Buchegger und? ist der faktor jetzt der "Goldenen Schnitt"?
Mit Zirkel und Geodreieck kann man die Längen zumindest konstruieren, das muss man nur noch in Programm umsetzen.
Und hier noch ein Lösungsversuch, lies sich zumindest händisch lösen, ich denke nichts übersehen zu haben. Regeln: Es existieren 2 Arrays Array1 enthält existierende Kanten Array2 enthält neue Kanten Für Gen0 werden in Array1 alle existierenden Kanten eingetragen Alle Skalierungen finden geteilt durch den magischen Schnitt (1+sqr(5))/2 statt Alle Drehungen finden im Uhrzeigersinn statt Für nachfolgende Generationen werden entweder nur die Kanten 1..2, 2..3, 3..4 oder als Ausnahmeregel nur die Kante 3..4 eingetragen Von zwei Punkten einer Kante ist immer die kleinere der Skalier- und Drehpunkt Von Gen0 wird die 0..1 Kante kopiert, an 0 skaliert und um 180 Grad gedreht, am Kantenende wird jeweils die gleichlange Kante 4 mal erzeugt und um jeweils um 72 Grad zur Vorkante gedreht um ein Fünfeck der Gen1 zu erzeugen. Die andere Kanten von Gen0 werden genauso behandelt, es entstehen 5 Fünfecke der Gen1. Alle neu erzeugten Kanten laut den Regeln werden in Array2 eingetragen. Nach Fertigstellung werden die Arrays getauscht, die neuen Kanten werden zu existierenden Kanten. Array2 ist wieder frei. Von Gen1 wird anhand des Array1, also beginnend an Kante 1..2, diese kopiert, skaliert und an 1 um 180 Grad rotiert. Nachfolgend 4 mal die Kante erzeugt, jeweils zur Vorkante um 72 Grad rotiert, ergibt ein Fünfeck der Gen2. Eine Ausnahmeregel trifft zu, wenn eine 2te neu erzeugte Kante (Gen2 grün, 1..2)auf einen existierenden Punkt (Gen1, 4) trifft. Dann wird das Fünfeck wie gehabt erzeugt, im Array2 werden jedoch nicht die Kanten 1..2, 2..3, 3..4, sondern nur die Kante 3..4 eingetragen. Das hat zur Folge dass bei der weiteren Berechnung der Gen3 die nicht erwünschten Fünfecke gar nicht erst erzeugt werden. Das sollte einfach und universell verwendbar sein.
Hallo MWS, Danke für die Skizze und die Erklärung! Auch Danke an Thomas für die Zirkelskizze! Fünfeccke und Pentagramme "wimmeln" nur so von Goldenen Schnitt-Verhältnissen. MWS schrieb: > Von zwei Punkten einer Kante ist immer die kleinere der Skalier- und > Drehpunkt Kannst du das genauer erklären? Was ist mit "kleiner" gemeint? > Von Gen1 wird anhand des Array1, also beginnend an Kante 1..2, diese > kopiert, skaliert und an 1 um 180 Grad rotiert. Nachfolgend 4 mal die > Kante erzeugt, jeweils zur Vorkante um 72 Grad rotiert, ergibt ein > Fünfeck der Gen2. Welche Formel verwendet man für die Drehungen in der Ebene um einen beliebigen Winkel um einen definierten Punkt? (Vektorrechnung) > Eine Ausnahmeregel trifft zu, wenn eine 2te neu erzeugte Kante (Gen2 > grün, 1..2)auf einen existierenden Punkt (Gen1, 4) trifft. Das muss man dann wohl für jeden Punkt abfragen!?! >Dann wird das > Fünfeck wie gehabt erzeugt, im Array2 werden jedoch nicht die Kanten > 1..2, 2..3, 3..4, sondern nur die Kante 3..4 eingetragen. Aha, ok.
Dormann schrieb: > Kannst du das genauer erklären? Was ist mit "kleiner" gemeint? Bei einem Punkt von 1 bis 2, ist 1 kleiner, 3 bis 4, 3 ist kleiner. Die Nummerierung beginnt am Erzeugungspunkt mit 0 und geht im Uhrzeigersinn bis 4, schau Dir die Skizze an. > Das muss man dann wohl für jeden Punkt abfragen!?! Nur wenn die zweite Kante erzeugt wird, muss man im Array der existierenden Kanten nachsehen, ob man eine Ecke trifft. > Welche Formel verwendet man für die Drehungen in der Ebene um einen > beliebigen Winkel um einen definierten Punkt? Da findest Du im Netz wirklich genügend Information und Code dazu, z.B.: http://www.c.happycodings.com/Games_and_Graphics/code36.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.