#declare No_Lights= finish { ambient 1 diffuse 0 } plane { y, 0 texture { pigment { color rgb 1 } finish { No_Lights } } } #declare n=50; // Anzahl der Würfel #declare xsize=5; // Breite des (rechteckigen) Platzierungsfeldes #declare zsize=5; // Länge des Platzierungsfeldes #if (xsize > zsize) // Ermittlung der längeren Seite des Platzierungsfeldes #declare high=xsize; #else #declare high=zsize; #end #declare offsx=-2; // x-Koordinate der südwestlichen Ecke des Platzierungsbereiches #declare offsy=0; // y-Koordinate der südwestlichen Ecke des Platzierungsbereiches #declare offsz=3; // z-Koordinate der südwestlichen Ecke des Platzierungsbereiches #declare maxerr=50; // Anzahl der maximal erlaubten Koordinatenzuweisungs-Versuche pro Objekt // (Überschreitung führt zum Programmende, auch wenn nicht alle Objekte // platziert wurden) #declare a=0; // Zählervariable für Würfel #declare p=seed(400); // Ausgangswert für Zufallszahlengenerierung #declare objs=array[n][4] // Array für Würfel-Ecken #declare objs_s=array[n] // Array für Würfel-Größen #declare s_min=0.2; // kleinste erlaubte Würfelgröße #declare s_max=0.4; // größte erlaubte Würfelgröße #declare s_scope=s_max-s_min; // Größe des Würfelgrößen-Bereichs #declare w=(xsize+zsize)/200; // Breite des Rahmens für den Platzierungsbereich #declare offst=; union { box { offst-, offst+ } box { offst+<-w/2, 0, zsize-w/2>, offst+ } box { offst-, offst+ } box { offst+, offst+ } texture { pigment { color rgb <0, 0, 1> } finish { No_Lights } } } // Kollisions-Flag: 0 = keine Kollision, 1 = Kollision // wird mit 1 initialisiert, damit Schleife zur Koordinatenzuweisung // wenigstens einmal durchlaufen werden kann // (in PoV-Ray gibt es KEINE "fußgesteuerten" do...while-Schleifen!) #declare c=0; // Zähler für Zuweisungsversuche; wird um 1 erhöht, wenn Versuch erfolglos #while (a, texture { pigment { color rgb } finish { No_Lights } } } #declare a=a+1; #end camera { orthographic location offst+ look_at offst+ angle 40 }