inicio sindicaci;ón

Aufgabe 10

“Gegeben sei ein quadratisches Bild in der Größe a x a mm. Es sei in kleine Quadrate zerlegt, n mal n Stück (also sei jede Seite in n gleich große Abschnitte unterteilt). Nehmt z.B. an, es sei n = 16 und a = 80 mm, die Rasterquadrate hätten also eine Seitenlänge von 5 mm. Nun sollen die Farben Schwarz und Weiß zur Verfügung stehen. Jedes Rasterquadrat kann entweder schwarz oder weiß gefärbt sein.”

A) Ein wenig Mathematik

Das müssten eigentlich 2^(n*n) verschiedene Bilder sein. Es gibt n*n “Pixel” und jeder kann die Farbe Schwarz oder weiß annehmen.

B, C, …) Das Programm

… ist eine Gemeinschaftsarbeit von Steffi und mir. Wir sind noch nicht so ganz zufrieden damit. Speziell bei der systematischen Erzeugung aller möglichen Pixelbilder stehen wir irgendwie auf dem Schlauch. (Tipps willkommen!) Abgesehen vom Zeilendrift funktioniert’s ansonsten aber ganz ordentlich.

Programm Pixelbilder muss durch einen Klick auf ‘Random’ oder ‘Systematic’ gestartet werden.

Lars said,

Februar 18, 2007 @ 15:59

>Speziell bei der systematischen Erzeugung aller möglichen Pixelbilder stehen wir irgendwie auf dem Schlauch.

Ich habe die processing-funktion “binary()” benutzt, sie erzeugt string-bitmasken aus integern (in meinem Fall aus dem “frameCount”), die habe ich dann in ein int-Array gecastet und dann nach der Anzahl der “1″en sortiert:


int[] dec2bin(int dec){
String temp = binary(dec, numRects);
/* CAUTION: function binary() is 32bit-save only! */
int[] bin = new int[numRects];
for(int i=0; i

Hoffe es hilft.

Lars said,

Februar 18, 2007 @ 16:03

naja, irgenwie werden die HTML-Zeichen im Code-Block nicht richtig ersetzt…
jetzt aber (sorry4spamming):


int[] dec2bin(int dec){
String temp = binary(dec, numRects);
/*CAUTION: function binary() is 32bit-save only!*/
int[] bin = new int[numRects];
for(int i=0; i<bin.length; i++){
bin[i] = (int) temp.charAt(i) -48;
}
return bin;
}

int[] sortByNumRects(){
int n = (int) pow(2, numRects);
int[][] temp = new int[numRects+1][0];
int count = 0;
for(int i=0; i<n; i++){
int[] num = dec2bin(i);
int trueCount = 0;
for(int j=0; j<num.length; j++){
if(num[j] == 1){
trueCount++;
}
}
temp[trueCount] = append(temp[trueCount], i);
}
int sorted[] = {};
for(int i=0; i<=numRects; i++){
sorted = concat(sorted, temp[i]);
}
return sorted;
}

Markus Hofmann said,

Februar 18, 2007 @ 16:15

Hey, super. Werd mir das die nächsten Tage mal genauer ansehen (Stress …), aber danke schonmal!

Frieder Nake said,

Mai 6, 2007 @ 18:08

So ein klein wenig, lieber Markus,

muss ich Dir zu dieser Aufgabe einen etwas bitteren Kommentar schreiben. Sagen wir lieber: möchte statt muss. (Den persönlich orientierten bekommst Du per Email, er ist entworfen.) Mit der Aufgabe 10, das ist Dir gewiss aufgefallen, solltet Ihr nun Eure algorithmische Kompetenz spielen lassen. Die Lösung, die Lars und Sebastian gefunden haben, ist diejenige, auf die jeder kommt (und zwar fast sofort), der sich algorithmisch bewegen kann. Ich hatte nicht erwartet, dass allzu viele das so sehen werden. Von Dir aber hätte ich das durchaus gedacht (wobei ich weiß, dass man nie von einer Person etwas ganz Bestimmtes erwarten soll).

Was ist der Sinn dessen, was ich sagen möchte? Dass es manchmal beim Studieren gut ist, sich ein wenig auf das einzulassen, was vorgeschlagen, erwartet, erörtert etc. wird, und nicht immer gleich zu schmollen, wenn die eigenen und besonderen Erwartungen nicht die der anderen sind.

Schwamm drüber und sei’s drum.

RSS feed for comments on this post · TrackBack-URI

Leave a Comment