Forum: PC-Programmierung fraktale Darstellung aus Fünfecken programmieren


von Dormann (Gast)


Angehängte Dateien:

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?

von Vlad T. (vlad_tepesch)


Lesenswert?

such mal nach Processing.
da lässt sich sowas relaiv gut machen

von Dormann (Gast)


Lesenswert?

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)

von Abdul K. (ehydra) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe ein ähnliches Beispiel in Postscript. Das könntest du 
entsprechend deinen Wünschen umgestalten.

von Markus M. (mark_m)


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

von richie (Gast)


Lesenswert?

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)?

von Vlad T. (vlad_tepesch)


Lesenswert?

entwder mit ghostscript, oder mit PDFCreator zB

von Reinhard Kern (Gast)


Lesenswert?

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

von Manno (Gast)


Lesenswert?


von Robert L. (lrlr)


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..)

von Udo S. (urschmitt)


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.

von mh (Gast)


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.

von Udo S. (urschmitt)


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.

von Abdul K. (ehydra) Benutzerseite


Angehängte Dateien:

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.

von Reinhard Kern (Gast)


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

von Udo S. (urschmitt)


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

von Robert L. (lrlr)


Lesenswert?

> 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..)

von Karl H. (kbuchegg)


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.

von Symmetrieker (Gast)


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.....

von Dormann (Gast)


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.

von Robert L. (lrlr)


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..

von Karl H. (kbuchegg)


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)

von Udo S. (urschmitt)


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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Udo S. (urschmitt)


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.

von MWS (Gast)


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.

von Udo S. (urschmitt)


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?

von MWS (Gast)


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.

von Udo S. (urschmitt)


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!

von MWS (Gast)


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.

von Karl H. (kbuchegg)


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)

von Udo S. (urschmitt)


Lesenswert?

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

von Karl H. (kbuchegg)


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 :-)

von MWS (Gast)


Lesenswert?

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 ?

von Karl H. (kbuchegg)


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 
:-)

von Karl H. (kbuchegg)


Angehängte Dateien:

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)

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Sieht auch nett aus, ist es aber noch nicht ganz :-)

von Udo S. (urschmitt)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

Schau noch mal genau aufs Original. Da berühren sich überhaupt keine 
Kanten. Die 5-Ecke hängen nur über die Eckunkte zusammen.

von Udo S. (urschmitt)


Lesenswert?

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.

von MWS (Gast)


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.

von D. I. (Gast)


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...

von Robert L. (lrlr)


Lesenswert?

@Karl Heinz Buchegger

und? ist der faktor jetzt der "Goldenen Schnitt"?

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Mit Zirkel und Geodreieck kann man die Längen zumindest konstruieren, 
das muss man nur noch in Programm umsetzen.

von MWS (Gast)


Angehängte Dateien:

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.

von Dormann (Gast)


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.

von MWS (Gast)


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

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
Noch kein Account? Hier anmelden.