#include "stdio.h" #include "strings.h" FILE *inFile; int bild[64][512]; int maxN; void readChar (int vonX, int vonY, int bisX, int bisY) { char aktChar; // Zeichen einlesen aktChar = fgetc(inFile); // printf("%c\n",aktChar); if (aktChar == 'Q') { // rekursiv weiterarbeiten readChar(vonX, vonY, bisX/2, bisY/2); readChar(bisX/2+1, vonY, bisX, bisY/2); readChar(vonX, bisY/2+1, bisX/2, bisY); readChar(bisX/2+1, bisY/2+1, bisX, bisY); } else { // Flaeche fuellen // printf(" (%i,%i) (%i,%i)\n",vonX,vonY,bisX,bisY); if (aktChar == 'B') for (int i = vonX; i <= bisX; i++) for (int j = vonY; j <= bisY; j++) { bild[i/8][j] |= 1 << (i % 8); } } } void parseFile() { // erst die Zahl lesen fscanf(inFile,"%i\n",&maxN); // printf("%i\n",maxN); readChar(0,0,maxN-1,maxN-1); } void writeErg() { printf("#define quadtree_width %i\n",maxN); printf("#define quadtree_heigth %i\n",maxN); printf("static char quadtree_bits[] = {\n"); // Hier wirkliche Werte ausgeben int zwN = ((maxN+7) / 8); for (int j = 0; j < maxN; j++) { for (int i = 0; i < zwN; i++) { printf("0x%02x,",bild[i][j]); } printf("\n"); } printf("};\n"); } int main (){ // Variablen vorbereiten memset(bild,0,sizeof(bild)); inFile = fopen("quadtree.in","r"); parseFile(); writeErg(); fclose(inFile); return(0); }