- for(int h = 0; h < nb_heur; h++) {
- blocks[h] = new Polygon(1.0, 1.0, 1.0, 0.0, xs, ys, 4);
+ for(int i = 0; i < nb_heur; i++) {
+
+ int nb_max_edges = 10;
+ int xt[nb_max_edges * nb_max_edges], yt[nb_max_edges * nb_max_edges];
+ int used[nb_max_edges * nb_max_edges];
+ int fail, x, y, n;
+ do {
+ fail = 0;
+ for(int k = 0; k < nb_max_edges * nb_max_edges; k++) {
+ used[k] = 0;
+ }
+ x = 0; y = 0; n = 0;
+ while(!used[x + nb_max_edges * y]) {
+ used[x + nb_max_edges * y] = 1;
+ xt[n] = x; yt[n] = y;
+ n++;
+ switch(int(drand48() * 4)) {
+ case 0: x++; break;
+ case 1: x--; break;
+ case 2: y++; break;
+ case 3: y--; break;
+ default: abort();
+ }
+ if(x < 0) x = 0;
+ else if(x >= nb_max_edges) x = nb_max_edges-1;
+ if(y < 0) y = 0;
+ else if(y >= nb_max_edges) y = nb_max_edges-1;
+ }
+ fail = (n < 10) || (x != 0) || (y != 0);
+ } while(fail);
+
+ scalar_t xs[nb_max_edges], ys[nb_max_edges];
+ int nb_edges = 0;
+ for(int l = 0; l < n; l++) {
+ int pl = (l + n - 1)%n, nl = (l + 1)%n;
+ if(xt[nl] - xt[l] != xt[l] - xt[pl] || yt[nl] - yt[l] != yt[l] - yt[pl]) {
+ xs[nb_edges] = scalar_t(xt[l]) * 25;
+ ys[nb_edges] = scalar_t(yt[l]) * 25;
+ nb_edges++;
+ }
+ }
+
+ cout << "n = " << n << " nb_edges = " << nb_edges << endl;
+
+ scalar_t red, green, blue;
+ do {
+ red = scalar_t(16 * int(drand48() * 16))/255.0;
+ green = scalar_t(16 * int(drand48() * 16))/255.0;
+ blue = scalar_t(16 * int(drand48() * 16))/255.0;
+ } while((red > 0.1 && green > 0.1 && blue > 0.1) ||
+ (red < 0.9 && green < 0.9 && blue < 0.9));
+ blocks[i] = new Polygon(1.0, red, green, blue, xs, ys, nb_edges);