25. Oktober 2011
Ein Versuch, eine Sierpinski Pyramide zu erstellen: Am meisten Schwierigkeiten hatte ich bei der Fraktalen Struktur, die Anzahl Abläufe (tiefe) exponentiell zu wiederholen. Code: Dynamische Kantenlänge = a Rundenanzahl = zimport processing.opengl.*; import peasy.*; PeasyCam cam; float s = .5; //scale int z = 4; // Rundenzahl float a = 400; //Seitenlänge float u = 400; //Verschiebung Horizontal float v = -600; // Verschiebung Vertikal float w = 200; // Verschiebung Tiefe void setup() { cam = new PeasyCam(this, 500); cam.setMinimumDistance(10); cam.setMaximumDistance(1000); size(800, 600, OPENGL); PFont font; font = loadFont("Verdana-48.vlw"); textFont(font, 12); } void draw() { lights(); pushMatrix(); translate(-a/2, -(a*sqrt(3)/4),-a/4); background(255); fraktal(); textAlign(RIGHT); fill(0); translate(-1.8*a,0,+100); text("P = print screen",width,100); translate(+20,+30,0); text("keys 1 to 9 = iterations",width,100); translate(+20,+30,0); text("mouse = move camera",width,100); translate(+20,+30,0); text("doubleclick = reset camera",width,100); popMatrix(); resetMatrix(); } void keyPressed() { switch(key) { case 's': save("screenShot.jpg"); println("save the screen to screenShot.jpg"); break; case '1': z=1; break; case '2': z=2; break; case '3': z=3; break; case '4': z=4; break; case '5': z=5; break; case '6': z=6; break; case '7': z=7; break; case '8': z=8; break; case '9': z=9; break; } } void fraktal() { noFill(); if(z>1) { z=z-1; pushMatrix(); scale(s,s,s); fraktal(); translate(+a, 0, 0); fraktal(); translate (-a/2, +(sqrt(3)/2 * a), 0); fraktal(); translate (0, -(sqrt(3)/4* a), + (sqrt(3)/2 * a)); fraktal(); popMatrix(); z= z+1; } else { pushMatrix(); scale(0.5,0.5,0.5); Tetraeder(); translate(a, 0, 0); Tetraeder(); translate (-a/2, (sqrt(3)/2 * a), 0); Tetraeder(); translate (0, -(sqrt(3)/4 * a), + (sqrt(3) / 2 * a)); Tetraeder(); popMatrix(); } } void Tetraeder() { fill(255); beginShape(); //bode vertex(u, v, w); vertex(u + a, v, w); vertex(u + (a / 2), v+(sqrt(3)/2 * a), w); endShape(CLOSE); beginShape(); //rechts vertex(u + (a / 2), v + ((sqrt(3) / 2 * a ) / 2), w + (sqrt(3) / 2 * a)); vertex(u + a, v, w); vertex(u + (a / 2), v +(sqrt(3)/2*a), w); endShape(CLOSE); beginShape(); //oben vertex(u + (a / 2), v + ((sqrt(3) / 2 * a) / 2), w + (sqrt(3) / 2 * a)); vertex(u + a, v, w); vertex(u, v, w); endShape(CLOSE); beginShape(); //links vertex(u + (a / 2), v + ((sqrt(3) / 2 * a) / 2), w + (sqrt(3)/ 2 * a)); vertex(u + (a / 2 ), v + (sqrt(3) / 2 * a), w); vertex(u, v, w); endShape(CLOSE); }