Hilbert Fun (Fraktale etc.) als rekursive Variante gesucht

Dieses Thema im Forum "Softsynth" wurde erstellt von xaez, 13. Dezember 2013.

  1. xaez

    xaez Tach

    mittlerweile habe ich mit versch. javascripts experimentiert, jedoch das Resultat ist noch nicht befriedigend
    Ziel ist es, daß z.B. bei Hilbert, Sierpinski u. ähnl. Funktionen (Fraktale) im rekursiven Modus die erzeugten Eckpunkte
    als x,y Paar z.B. als MIDI-Par. ö.ä. weiterverarbeitet werden können
    die Verarbeitung der Funktionen geschieht unter MaxMsp ver.4.6.3 bzw. die neue ver. 6.1.5, in MaxMsp gibt es externals (Objekte) welche java bzw. js verarbeiten können -> MaxMsp-, java-, js-Tutorials

    Hilbert u. Verwandte sind übrigens Bestandteile meines Projekts "vc_fun_gen" (78 versch. Kurven, Funktionen welche als Midi, osc, Anbindung an modulare Interfaces (expert sleepers) weiterverarbeitet werden können, das Projekt durchläuft noch dieTestphase

    merci f. Hilfe u. Unterstützung

    Gr. :cool:
     
  2. Burt

    Burt Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    Rekursion ist - und ich bin ein echter Rekursions-Fan - ein StackMonster ohne Ende.
    Ich befürchte (sollte ich Dein Projekt richtig verstanden haben) daß
    - die Speicher-Ressourcen (Memory, Handles) bei rekursiv errechneten Fraktalen schnell erschöpft sind
    - Dir das Stack-Management der Laufzeitumgebung Zeitabläufe einbringt, die ausserhalb Deiner Kontrolle liegen und signifikant sein können.

    Meine Realtime-Versuche mit Rekursion habe ich schnell wieder eingestellt...
     
  3. xaez

    xaez Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    und diese Befürchtung hege ich mittlerweile ebenfalls

    ist kein "Staats"geheimnis: hier der sourcecode für Hilbert recursive
    vielleicht siehst Du eine Lücke im code...


    ---------

    autowatch=1;

    var len_original = 256;
    var rota = 90;
    var depth = 1;
    var clearflag = 1;
    var dir, ax, ay, bx, by;

    var axArray = new Array();
    var ayArray = new Array();
    var bxArray = new Array();
    var byArray = new Array();


    function msg_int(i) {
    if(i<=9 && i>0)
    setgen(i);
    }

    function setgen(i)
    {
    depth = i+1;

    len = len_original/Math.pow(2, depth-1);
    ax = ay = len / 2;
    dir = rota;
    if(clearflag)
    outlet(0, "clear");
    hilbi("X", depth);

    axArray = new Array();
    ayArray = new Array();
    bxArray = new Array();
    byArray = new Array();

    }




    function size(a)
    {
    len_original = a;
    setgen(0);
    }

    function angle(a)
    {
    rota = a;
    }

    function autoclear(a)
    {
    if(a!=0) clearflag = 1;
    else clearflag = 0;
    }



    function hilbi(instruction, d)
    {
    var i, c;

    if(d <= 0) return;

    d--;
    //post(instruction, "\n");

    for(i=0; i<instruction.length; i++)
    {
    c = instruction;

    if(c=='X')
    hilbi("-YF+XFX+FY-", d);

    else if(c=='Y')
    hilbi("+XF-YFY-FX+", d);

    else if(c=='F')
    {
    var rad = 2*Math.PI/360 * dir;
    var p = len * Math.cos(rad);
    var q = len * Math.sin(rad);

    bx = ax+p;
    by = ay+q;
    bxArray.push(bx);
    byArray.push(by);
    outlet(0, "linesegment", ax, ay, bx, by);

    ax = bx;
    axArray.push(ax);

    ay = by;
    ayArray.push(ay);


    }


    else if(c=='+')
    dir += rota;

    else if(c=='-')
    dir -= rota;

    }
    }

    //function bang()
    //{
    //outlet(0, "linesegment", ax, ay, bx, by);
    //}
    function bangAt(whatLine)
    {
    outlet(0, "linesegment",
    axArray.pop(whatLine),
    ayArray.pop(whatLine),
    bxArray.pop(whatLine),
    byArray.pop(whatLine));
    }

    -------

    merci u. Gr.
     
  4. Burt

    Burt Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    Puh, für einen Codereview müsste ich erst einmal in den Erinnerungskeller
    und eine LANGE Entstaubungsaktion starten (hust, hust, hust).
    Ist schon einiges (10+ Jahre :opa: ) her...

    Ich hab' mir kurz den Java-Applet Code hier angeschaut:
    http://www.jjam.de/Java/Applets/Fraktal ... Kurve.html

    Was auffällt, ist die Nutzung von einigen globalen Variablen in Deinem
    Code (z.Bsp dir), die lokal im Rekursionsaufruf des oben genannten
    Beispiel-Codes sind.

    Globale Status-Variablen und Rekursion vertragen sich (meiner angestaubten
    Erinnerung nach) nicht. Wegen des Rekursionsaufrufs und seines Speicherrahmens.
    Falls Deine Frage war: "Warum macht mein Code nicht, was ich will?".

    Was sag ich da? :selfhammer: Ich bin auf dem Gebiet sicher keine Autorität,
    hier im Forum gibt es viel begabtere Coder als mich.

    Etwas Doku im Code ist auch hilfreich :school:
     
  5. xaez

    xaez Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    gut jetzt in medias res:

    var rota ist f. funktion angle verantwortlich damit kann die Hilbert Kurve geändert weden -> Sierpinski, Koch etc.

    meines Wissens basiert der Algorithmus in funktion hilbi auf Varianten v. L-Systems - hier wird meines Wissens die Hilbert Kurve generiert

    funktion size verändert die Ausdehnung (Größe) der Hilbert Kurve

    funktion setgen bestimmt die Tiefe (Faktor) der Hilbert Kurve

    normalerweise wird die gesamte Kurve adhoc generiert

    was aber benötigt wird, ist das "Ablaufen" der Hilbert Kurve von Eckpunkt zu Eckpunkt - das Tempo wird durch den eingehenden Trig-Impuls bestimmt

    dabei sollen dementspr. auch die versch. Faktorgrößen (ich benutze derz. 1 - 4) berücksichtigt werden

    ich denke z.B. an einen Einsatz in einer Komp.: der Instrumentalist löst durch entspr. musikal. Parameter eine
    entspr. Hilbert (o. a.) Kurve aus, welche zusätzliche Töne, Klänge etc. anhand ihres Verlaufs, Rasters "hinzufügt" bzw. generiert

    das ist das anzustrebende Ziel
     
  6. Burt

    Burt Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    Falls Du noch nicht in der Richtung unterwegs bist:
    Für Dein Vorhaben scheint mir CSOUND die richtige Umgebung
    zu bieten. Zum Thema CSOUND und Fraktale nach
    die Suchmaschine Deiner Wahl entsprechend füttern.
     
  7. xaez

    xaez Tach

    Re: Hilbert Fun (Fraktale etc.) als rekursive Variante gesuc

    das ist bestimmt eine Variante Burt,

    aber Vorrang hat bei mir die Realisierung als java, js und Anwendung unter MaxMsp vor allem um für spätere
    Kompilierung als vst, vsti eine Option zu haben

    wenn man sich ein dementspr. Max-patch erstellt und den obengelisteten sourcecode in dem js external verwendet,
    erhält man zumindest (wenn auch nicht in regulärer Abfolge, evtl. liegt das auch in der Natur der Hilbert u. ähnl. Fraktale) die Verbindungslinien zw. den Eckpunkten - ich habe das mit Hilfe einer Einfärbung der aktiven Linien feststellen können

    zur Darstellung, wie im Projekt vc_fun_gen, benutze ich als oscilloscope das lcd external bzw. jit.lcd

    wie aber in vorherigem post angegeben, mir nützen bei meinem Vorhaben hauptsächlich nur die Eck- bzw. Verbindungspunkte etwas

    das im attachment befindl. jpg stellt einen Ausz. aus dem verwendeten Max-patch dar (Testver.)

    bis bald und Gr.
     

    Anhänge:

Diese Seite empfehlen