Wouah ... vous en faites combien des Threads?
Sinon, moi quand je me suis lancé dans le QThread, j'ai pas eu de problème ... du coup, ça serait interessant de savoir comment vous avez résolu les votres...
Version imprimable
Pour les threads il ne faut pas en créer trop, moi perso j'en créé autant qu'il y a de cores dans le processeur :ccool:
L'idéal serait sans doutes d'utiliser un nombre de threads déterminé par l'utilisateur, car je n'ai pas en tête de fonction en provenance de Qt pouvant récupérer le nombre de cœurs du processeur de l'utilisateur (-4 points pour développer cela avec une bibliothèque tierce, c'est trop cher payé pour un détail comme celui-ci, d'autant plus que ma génération est moche).
Je n'ai d'ailleurs pas dû comprendre la méthode de rendu, car personne n'affiche point par point sa fractale, je me trompe ?
Je l'aurais bien gardé pour moi mais le but est d'apprendre Qt avant tout non ?
http://qt.developpez.com/doc/latest/...ealthreadcount
Je me dis qu'il est tant d'agir, car mon rendu est archi-moche, et car le temps de génération n'est pas bon. J'ai donc décidé de changer totalement de support de rendu, je passerai maintenant par un QImage avec du setPixel, ce qui rendra l'affichage d'autant plus rapide.
En terme de performances, je pense pouvoir atteindre un maximum de 10/20 secondes pour calculer 5 000 itérations. Cela engendrera évidemment des changements énormes dans mon code, pour sûr, mais si je veux gagner un tee-shirt, il faudra bien que je bosse et que j'arrive a avoir un rendu correct. J'ai déjà passé plusieurs heure à réfléchir et à schématiser des choses diverses et variées, et le code correct commence à se dessiner. De là, est-ce que je parviendrai à implémenter mes idées ? A suivre, comme on dit.
Cela va faire trois heures que je travaille sur ma nouvelle méthode de génération (implémentation modifiée et utilisation d'un QImage), et j'ai enfin deux screens à vous montrer.
Le premier est avec une coloration sauvage, c'est-à-dire que je permets à l'utilisateur de changer les couleurs utilisées pendant la génération (à condition qu'il ait le temps, bien sûr). Le résultat :
http://sd-1.archive-host.com/membres...0506/Scene.png
En regardant cette image, vous pouvez voir comment je génère l'image. J'ai suivi l'idée donnée plus tôt par khayyam90, en ne gérant pas aléatoirement les points de départ.
Le second, classique (environ six secondes de génération, je suis content) :
http://sd-1.archive-host.com/membres...06/Scene-2.png
J'ai énormément retravaillé l'implémentation de la suite, et on peut voir le résultat. Avant, il n'y avait que l'allure de la fractale, non le reste.
Les performances se sont elles aussi améliorées.
Et voilà, j'ai terminé la coloration du Mandelbrot.
Pour 50 itérations, couleur noire (environ une seconde de génération) :
http://sd-1.archive-host.com/membres...Mandelbrot.png
:ccool:
Maintenant, ça donne quoi, en colorisé ? Parce que des nuances de gris uniquement, c'est un peu fade...
J'ai tenté de trouver un petit violet pour présenter la couleur.
Avec r = 255, g = 100 et b = 255, pour 50 itérations (même temps de génération) :
http://sd-1.archive-host.com/membres...ndelbrot-2.png
On peut remarquer une coupure dans la continuité de ce que je nomme les halos externes à la fractale : c'est parce que j'affiche le QImage dans ma scène qui a par défaut une couleur de fond noire.
ca prend bonne tournure :king:
Et voilà, j'ai réglé le problème des coupures avec un système de coloration dite intelligente de la couleur de fond de la scène et un changement en terme de dimensions de la fractale à récupérer.
Mêmes informations de génération que celles de la fois précédente pour que vous puissiez comparer :
http://sd-1.archive-host.com/membres...ndelbrot-3.png
Bonsoir à tous,
Je reviens vers vous avec des nouvelles à donner sur ma participation. En terme des fractales elles-mêmes, vous devez sans doute avoir compris que je ne me servais pas du module mis à disposition, préférant générer moi-même mes fractales. N'ayant suivi aucun cours sur les complexes et les choses dans le genre, j'ai tout de même réussi à coder la génération de fractales Mandelbrot sans avoir touché aux fractales de ma vie, mais pour le Buddhabrot, je sèche un peu (j'espère tout de même avoir fait de quoi récupérer un joli t-shirt :aie:). J'ai tout de même bien travaillé les optimisations, et j'arrive avec des chiffres très convaincants sur le temps de génération, affichage non compris.
- 400x300px, 50 itérations : 14 msec
- 1556x979, 50 itérations : 154 msec
- 5000x5000, 50 itérations : 4 sec 168 msec
- 5000x5000, 100 itérations : 5 sec 603 msec
Je verrai si je code le Buddhabrot, mais si je le gère, ce sera uniquement avec mon code, je ne toucherai pas au module (je suis têtu, n'est-ce pas ?).
Ce défi a été très enrichissant, vivement les écrits, pour que je puisse comprendre cette fractale-ci, et vivement les suivants défis !
:king:
comment tu va mettre minable tes prof de math :mouarf:
Si tu arrive à faire le mandelbrot, tu peut faire le boudabrot ;)
J'avais expliqué la différence entre les deux rendus.
http://www.developpez.net/forums/d84...t/#post4851249
Si y as quelques choses que tu ne comprend pas demande. C'est le thème du défis. Ce serait dommage que tu n'arrive pas à la faire. Surtout que tu as tous ce qu'il te faut pour le faire maintenant ;)
Selon les explications de Wikipedia, j'ai créé un tableau de int** de la sorte d'avoir int[x][y] = la fréquentation du point (x, y). J'utilisais exactement le même code que celui du Mandelbrot, à part le fait que je ne colorisais pas immédiatement mais que je colorisais selon ce tableau. Au final, j'obtenais une image de couleur uniforme : logique, je traite l'image point par point et non aléatoirement, ce qui fait que peut importe la valeur de x et de y, la fréquentation maximale sera à 1. Moralité, je dois passer par des points aléatoires pour tomber plusieurs fois au même endroit ?
c'est là où tu t'es trompé. cela ne peut pas être uniforme.
Un fois que tu à la séquence, il faut faire +1 à chaque points de séquence. Donc pour tous les points complexe de la séquence, il faut retrouver sa position en coordonner image et faire un +1 sur le pixel de l'image. sur toutes les séquence que tu génère, il y as bien plusieurs points qui incrémente un même pixels.
au finale tu as bien de la variation.