Peano Kurve

ZapZerRap

Mitglied
Hi ich muss als Teil eines Uni Praktikums ein Programm schreiben welches die Peano- und Hilbertkurve rekursiv zeichnet (die Tiefe soll vorher angegeben werden). Die Hilbertkurve funktioniert soweit aber ich habe absolut keine Ahnung wie ich die Rekursion der Peanokurve schreiben soll.

Die Rekursion für die Hilberkurve sieht wie folgt aus:
Java:
public int hilbert(int orient, int angle, int level)
    {
    if (level-- == 0) return angle;

        angle += orient * 90;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle -= orient * 90;
        angle = hilbert(orient, angle, level);
        step(angle);
        angle = hilbert(orient, angle, level);
        angle -= orient * 90;
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle += orient * 90;

        setChanged();
        notifyObservers(getDegrees());

        return angle;
    }
Die Peanokurve soll so wie hier: https://de.wikipedia.org/wiki/Peano-Kurve
auf den Bildern zu sehen verlaufen.

Grüße ZapZerRap
 
Zuletzt bearbeitet:

stg

Top Contributor
Ein bischen was muss schon von dir kommen....

Ganz allgemein aber geht sowas eigentlich immer recht einfach, indem man das zugehörige Lindenmayer System bestimmt.

Übrigens: Es gibt nicht die Peano-Kurve, sondern der Begriff bezeichnet eine ganze Klasse von Kurven. Selbst auf der von dir verlinkten Seite sind schon zwei verschiedene aufgeführt. Da solltest du erst mal abklären, welche du überhaupt meinst.
 

ZapZerRap

Mitglied
Sorry meine natürlich die obere
Peano_curve.png

Das Lindenmayersystem sagt mir jetzt erstmal garnix.
Es ist für mich halt auch nicht so einfach hatten 1 Semester lang Java wo wir solche Spielchen wir "Hallo Welt" programmiert haben und bekommen im Praktikum so etwas vorgesetzt wovon ich noch nie gehört habe und müssen das ohne Hilfestellung seitens der Uni lösen.
Meinst du mit Lindenmayer System die Grafische Grammatik (davon haben wir in der Uni auch noch nix gehört bin nur während der Recherchen nach einer Lösung darauf gestoßen)

für die Tiefe 1 habe ich ja schon etwas allerdings kommt da aber Tiefe 2 und höher nur bockmist raus

Java:
public int peano(int orient, int angle, int level)
    {  
        if (level-- == 0)  
        {  
            return angle;
        }
        angle += orient * 90;
        step(angle);
        step(angle);
        angle -= orient * 90;
        step(angle);
        angle -=orient *90;
        step(angle);
        step(angle);
        angle += orient * 90;
        step(angle);
        angle += orient * 90;
        step(angle);
        step(angle);
         
        setChanged();
        notifyObservers(getDegrees());
     
        return angle;
    }
 

ZapZerRap

Mitglied
ahja sorry das war auch der falsche mit dem hatte ich nur bisschen rum probiert.
hier nochmal der "richtige":

Java:
public int peano(int orient, int angle, int level)
    {
        if (level-- == 0) return angle;

        angle += orient * 90;
        angle = hilbert(-orient, angle, level);
        step(angle);
        step(angle);
        angle -= orient * 90;
        angle = hilbert(orient, angle, level);
        step(angle);
        angle = hilbert(orient, angle, level);
        angle -= orient * 90;
        step(angle);
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle += orient * 90;
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle += orient * 90;
        step(angle);
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle += orient * 0;
     
        setChanged();
        notifyObservers(getDegrees());
     
        return angle;
    }
 

stg

Top Contributor
Was zuallererst auffällt, ist, dass du nur 6 rekursive Aufrufe in deinem Code hast. Hier wird aber doch jedes Quadrat in jedem Schritt in 9 kleinere Quadrate aufgeteilt.
 

ZapZerRap

Mitglied
meine momentane rekursion sieht so aus :
Java:
public int peano(int orient, int angle, int level)
    {
        if (level-- == 0) return angle;

        angle += orient * 90;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle += orient * 0;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle -= orient * 90;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle -= orient * 90;
        step(angle);
        angle -= orient * 0;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle += orient * 90;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle = hilbert(-orient, angle, level);
        angle += orient * 90;
        step(angle);
        angle += orient * 0;
        angle = hilbert(-orient, angle, level);
        step(angle);
        angle += orient * 0;
        angle = hilbert(-orient, angle, level);


        setChanged();
        notifyObservers(getDegrees());
       
        return angle;
    }

ich verstehe allerdings nicht warum ab Tiefe 2 sogar die ersten 9 Felder falsch gezeichnet werden die bei Tiefe 1 noch richtig sind.
 

Ähnliche Java Themen

Neue Themen


Oben