Hilbert Fun (Fraktale etc.) als rekursive Variante gesucht

xaez (verstorben)

xaez (verstorben)

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

  • hilbert_line_colorize_white_snap.rar
    942,6 KB · Aufrufe: 0


News

Zurück
Oben