Générateur de fractales DVP

1.0

bateau.png

De quoi s'agit-il ?

Documentation de ma participation au défi Buddhabrot de la rubrique Qt de developpez.com (-> http://qt.developpez.com/defis/01-buddhabrot/)

Fonctionnalités

L'application présentée ici permet d'afficher les fractales suivantes : L'application permet de définir ses propres fractales. Il suffit pour cela d'écrire un plugin. Chaque plugin tiendra dans un fichier de bibliothèque à liaison dynamique qu'il vous suffira de copier dans le répertoire /data/fractales/ . Un exemple de plugin est fourni dans l'archive (multibrot4). Chaque plugin accessible ajoutera un choix supplémentaire lors de la sélection de la fractale à générer.

Sur chaque fractale, l'utilisateur peut zoomer/dézoomer. Le choix du nombre d'itérations de calcul détermine la profondeur de la fractale. Plus le nombre d'itérations seront grand, plus le temps de calcul sera grand. Une génération non animée permet d'obtenir rapidement un résultat, l'animation étant très gourmande en ressources.
La génération des fractales est multithreadée en fonction des capacités du CPU.

Rendu point à point / aléatoire

L'application propose 2 types de rendu : point à point et par points aléatoires.
Le rendu point à point va déterminer une suite fractale correspondant à chaque pixel. On aura donc largeur*hauteurs suites déroulées.
Le rendu aléatoire va déterminer N suites fractales correspondants autant de points déterminés au hasard.
Le bon effet graphique d'une fractale ou d'une autre dépend du choix du type de rendu : le MandelBrot est plus précis en rendu point à point, tandis que le BuddhdaBrot sera plus précis en rendu aléatoire très profond.

Coloration

L'application proposée possède plusieurs méthodes de coloration des fractales : L'utilisateur peut rajouter librement ses propres méthodes de coloration, il suffit pour cela d'implémenter un fichier [Nomdufichier].js à déposer dans le répertoire /data/palettes/. Ce fichier pourra être accompagné d'une image [Nomdufichier].png placée au même endroit. Chaque palette de couleurs scriptée ajoute un bouton la commandant dans la zone de coloration de l'application, à la suite des colorations natives. Les colorations scriptées sont plus lentes que les colorations natives.
Les scripts devront posséder les 2 méthodes suivantes :
({
init : function(nbLevels){
	// traitement appelé au chargement du script, permettant d'obtenir la granularité de la coloration, en nombre de niveau de couleur à générer
},

compute : function(i){
	// renvoie un entier sous la forme des 3 octets RGB concaténés dans cet ordre.
	// i représente le niveau de la couleur à générer
}
})
La présence du fichier .js suffit à inclure la coloration dans l'application.

Optimisations

L'application utilise des conteneurs à accès en O(1) vers des types scalaires pour manipuler le plus rapidement possible toutes les données nécessaires. Le passage vers des objets Qt de rendu se fait à la fin de la génération.
Chaque fractale peut définir des propriétés géométriques de symétrie axiale ou centrale, le moteur de rendu exploitera ces informations pour ne calculer que les points nécessaires. On pourra donc aisément diviser par 2 le temps de rendu d'une fractale symétrique.

Calcul distribué

L'utilisateur a la possibilité de spécifier des emplacements réseau comportant des agents de génération. L'application se chargera de répartir les zones de calcul entre les différentes unités de calcul locales et distantes. Un agent de calcul réseau est déployé au travers d'un serveur web par le protocole HTTP. Un agent réseau consiste en un fichier ready.php (indiquant qu'il est prêt) et un fichier generate.php appelant une instance distante de la présente application. Des options de lancement particulières permettent de contrôler le calcul d'une partie de l'image à générer.
Ce déploiement via HTTP nous permet de nous affranchir de la gestion d'accès réseau, du contrôle DOI, permet un ajout de logique de contrôle tiers, de statistiques tierces, d'un load balancing, de logs ... bref de toutes les fonctionnalités fournies par (par exemple) un Apache.

Internationalisation

L'internationalisation est gérée au moyen de fichiers de traduction Qt, la présente archive propose les traductions française & anglaise.

Design

L'application utilise une feuille de style spécifique permettant d'outrepasser les styles du système de fenêtrage utilisé.




Generated on Fri Feb 26 21:07:52 2010 for BuddhaBrot by  doxygen 1.4.6-NO