fraktale Darstellung aus Fünfecken programmieren

Gast #2592854
Lesenswert?
• ▲
▼
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?
Angehängte Dateien:
#2592940
Lesenswert?
• ▲
▼
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
#2593232
Lesenswert?
• ▲
▼
@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..)
#2593242
Lesenswert?
• ▲
▼
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.
Gast #2593253
Lesenswert?
• ▲
▼
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.
#2593283
Lesenswert?
• ▲
▼
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.
Persönliche Seite #2593455
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #2593744
Lesenswert?
• ▲
▼
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
#2593764
Lesenswert?
• ▲
▼
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
#2593855
Lesenswert?
• ▲
▼
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.
Gast #2593863
Lesenswert?
• ▲
▼
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.....
Gast #2596123
Lesenswert?
• ▲
▼
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.
#2596138
Lesenswert?
• ▲
▼
>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..
#2596217
Lesenswert?
• ▲
▼
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)
#2596243
Lesenswert?
• ▲
▼
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.
#2596272
Lesenswert?
• ▲
▼
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.
Gast #2596340
Lesenswert?
• ▲
▼
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.
#2596384
Lesenswert?
• ▲
▼
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?
Gast #2596433
Lesenswert?
• ▲
▼
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.
#2596439
Lesenswert?
• ▲
▼
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!
Gast #2596465
Lesenswert?
• ▲
▼
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.
#2596498
Lesenswert?
• ▲
▼
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)
#2596574
Lesenswert?
• ▲
▼
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 :-)
#2596691
Lesenswert?
• ▲
▼
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 
:-)
#2596727
Lesenswert?
• ▲
▼
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)
Angehängte Dateien:
#2596731
Lesenswert?
• ▲
▼
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.
Gast #2596819
Lesenswert?
• ▲
▼
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.
Gast #2596861
Lesenswert?
• ▲
▼
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...
Gast #2597284
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #2597602
Lesenswert?
• ▲
▼
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.
Gast #2597625
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren