+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+struct parameters {
+ // nombre max d'itérations
+ int maxiter;
+ // zone d'intérêt par défaut
+ double Rmin;
+ double Rmax;
+ double Imin;
+ double Imax;
+ // facteur d'échelle
+ double Rscale;
+ double Iscale;
+};
+
+const parameters initial_parameters = {
+ 1000, // maxiter
+ -2.05, // Rmin
+ 0.55, // Rmax
+ -1.3, // Imin
+ 1.3, // Imax
+ 0.0, // Rscale
+ 0.0, // Iscale
+};
+
+int check_point(parameters& p, double cr, double ci)
+{
+ double zr = 0.0;
+ double zi = 0.0;
+ double zr2 = 0.0;
+ double zi2 = 0.0;
+ int i;
+ for (i = 0 ; zr2 + zi2 < 4 && i < p.maxiter; i++) {
+ zi = 2 * zr * zi + ci;
+ zr = zr2 - zi2 + cr;
+ zr2 = zr * zr;
+ zi2 = zi * zi;
+ }
+ return i;
+}
+
+// int check_point(parameters& p, int x, int y)
+// {
+// double cr = p.Rmin + x * p.Rscale;
+// double ci = p.Imax - y * p.Iscale;
+// return check_point(p, cr, ci);
+// }
+
+void set_color(DrawingWindow& w, parameters& p, int i)
+{
+ double rouge, vert, bleu;
+ if (i >= p.maxiter) {
+ rouge = vert = bleu = 0.0;
+ } else {
+ int ii = (p.maxiter - 1 - i) % 96;
+ if (ii < 32) {
+ // vert -> bleu
+ bleu = ii / 32.0;
+ vert = 1.0 - bleu;
+ rouge = 0.0;
+ } else if (ii < 64) {
+ // bleu -> rouge
+ rouge = (ii - 32) / 32.0;
+ bleu = 1.0 - rouge;
+ vert = 0.0;
+ } else {
+ // rouge -> vert
+ vert = (ii - 64) / 32.0;
+ rouge = 1.0 - vert;
+ bleu = 0.0;
+ }
+ }
+ w.setColor(rouge, vert, bleu);
+}