-
-void QtDrawingArea::init(int width, int height, const char *title)
-{
- if (title)
- this->setWindowTitle(title);
- this->setFocusPolicy(Qt::StrongFocus);
- image = new QImage(width, height, QImage::Format_RGB32);
- image->fill(QColor(Qt::white).rgb());
- this->setFixedSize(image->size());
- QtDrawingArea::visibleCount++;
- this->show();
- painter = new QPainter(image);
-}
-
-
-//============================================================
-
-/* paramètres par défaut */
-int larg = 600;
-int haut = 600;
-float Rmin = -2.05;
-float Rmax = 0.55;
-float Imin = -1.3;
-float Imax = 1.3;
-
-int maxiter = 100;
-
-void DrawingThread::run()
-{
- int x, y; /* le pixel considéré */
- float cr, ci; /* le complexe correspondant */
- float zr, zi; /* pour calculer la suite */
- float zr2, zi2;
- float pr, pi; /* taille d'un pixel */
- float rouge, vert, bleu;
- int i;
-
- // QtDrawingArea fen(argc, argv, larg, haut);
-
- pr = (Rmax - Rmin) / larg;
- pi = (Imax - Imin) / larg;
-
- cr = Rmin;
- for (x = 0; x < larg; x++) {
- ci = Imin;
- for (y = 0; y < larg; y++) {
- /* z_1 = c */
- zr = cr;
- zi = ci;
- for (i = 1; i <= maxiter; i++) {
- zr2 = zr * zr;
- zi2 = zi * zi;
- if (zr2 + zi2 >= 4) {
- /* |z| >= 2 : on sort de la boucle */
- break;
- }
- /* on calcule le z suivant */
- zi = 2*zr*zi + ci;
- zr = zr2 - zi2 + cr;
- }
- /* on est sorti trop t\e-bôt du for(...):\e-A
- on affiche le pixel d'un couleur en fonction
- de i */
- if (i <= maxiter / 2) {
- /* entre rouge et vert */
- vert = (2.0 * i) / maxiter;
- rouge = 1.0 - vert;
- bleu = 0.0;
- } else if (i <= maxiter) {
- /* entre vert et bleu */
- rouge = 0.0;
- bleu = (2.0 * i) / maxiter - 1.0;
- vert = 1.0 - bleu;
- } else /* (i > maxiter) */
- rouge = vert = bleu = 0.0;
- fen.setColor(rouge, vert, bleu);
- fen.drawPoint(x, y);
-
- ci += pi;
- }
- cr += pr;
- // fen.flush();
- }
- // fen.wait();
-}
-
-#endif