FRACTALE DE MANDELBROT

cs_daguero Messages postés 3 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 2 janvier 2009 - 25 déc. 2008 à 17:53
Coincoin39 Messages postés 1 Date d'inscription vendredi 10 mars 2017 Statut Membre Dernière intervention 11 mars 2017 - 11 mars 2017 à 16:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48787-fractale-de-mandelbrot

Coincoin39 Messages postés 1 Date d'inscription vendredi 10 mars 2017 Statut Membre Dernière intervention 11 mars 2017
11 mars 2017 à 16:01
Bonjour,

J'ai repris ton projet afin de le customiser.
site web : http://frataleplot.rhenry.fr/js/Ensemble_de_Julia.html

Améliorations :
- Zoom uniquement clique gauche
- Sauvegarde de l'image possible (clique droit)
- Ajout d'autres type de fractales

http://frataleplot.rhenry.fr/
cs_daguero Messages postés 3 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 2 janvier 2009
2 janv. 2009 à 13:44
Pour naruto sama: macsou01 a raison. En virgule flottante, la précision dépend de la quantité de chiffres significatives, dont la limite est définie en dur par l'implémentation du langage de programmation.
macsou01 Messages postés 45 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 28 juillet 2011
2 janv. 2009 à 13:22
1.268654869556 * 10^4 par exemple ? Si c'est ça alors c'est la mantisse qui limitera la précision ;).
naruto sama Messages postés 1 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 2 janvier 2009
2 janv. 2009 à 11:17
je vais surement dire une bêtise, mais pourquoi, ne pas faire ça de manière scientifique et privilégier les puissances de 10 a la virgule, ce qui enlèverai toute limite a ton code :D
macsou01 Messages postés 45 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 28 juillet 2011
1 janv. 2009 à 23:32
Oui c'est ça le principe, mais le zoom est en fait défini par des intervalles (xmin, xmax, ymin, ymax), et comme il n'y a que 17 chiffres après la virgule en JS (il me semble), et bien à un moment donné on ne peut plus zoomer (par exemple xmax devient égal à xmin) ;).
Sinon j'ai eu à faire ça en C++ pour un petit projet à faire dans mon IUT (mais sans fonction de zoom à la souris) mais je n'ai pas testé de zoom important avec.
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
1 janv. 2009 à 22:05
Ma fois, tu sembles avoir très bien compris ce que je veux dire ;)
En gros, il faut recalculer l'affichage de l'endroit précis où l'on est en train de zoomer, comme ça le zoom est parfaitement infini.
Pour ce qui est de la pratique maintenant je ne saurait pas te dire comment y parvenir étant donné que je ne sais pas programmer en JS. Si cela s'avère impossible en JS, fais-le dans un autre langage ^^
macsou01 Messages postés 45 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 28 juillet 2011
1 janv. 2009 à 21:43
Je ne comprend pas ce que tu veux dire...
L'effet de pixelisation ne dépend pas de la façon dont c'est dessiné mais de la précision de calcul.
De plus, j'ai déjà pensé à dessiner à fur et à mesure, mais je ne sais pas comment faire (car l'instruction qui dessine le pixel est dans des des boucles for et en javascript, ça bloque le navigateur. Mais peut-être qu'avec un timeout... Faut voir ;).
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
1 janv. 2009 à 20:37
Afin d'éviter l'effet de pixelisation (et pour rendre la chose un peu plus amusante :) ), tu pourrais retracer la fractale au fur et à mesure que l'on zoom ;-)

Grobs
cs_daguero Messages postés 3 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 2 janvier 2009
25 déc. 2008 à 17:53
J'ai factorisé le code ainsi (sans optimisations) et il affiche les résultats en couleur.
Salutations et merci
Dimitri

function draw() {
var color = 0 ;
var color1 = 0 ;
var color2 = 0 ;
var color3 = 0 ;
if (canvas.getContext){

minX = parseFloat(document.getElementById('minX').value);

maxX = parseFloat(document.getElementById('maxX').value);

minY = parseFloat(document.getElementById('minY').value);

maxY = parseFloat(document.getElementById('maxY').value);

maxIter = document.getElementById('maxIter').value;
width height document.getElementById('size').value;

var coordsInv = 'Coordonnées invalides :\n';

if(maxX == minX)
coordsInv +'maxX minX.\n';

if(maxY == minY)
coordsInv +'maxY minY.';

if(coordsInv != 'Coordonnées invalides :\n')

return alert(coordsInv);

var r = (maxX - minX) / (maxY - minY); //Permet d'adapter la taille du canvas en fonction des coordonnées données (ou de la zone dessinée).

if(r >= 1) {

width *= r;

} else {

height /= r;

}

canvas.width = width;

canvas.height = height;

var ctx = canvas.getContext('2d');

for(var x = 0; x < width; x++) {

for(var y = 0; y < height; y++) {

var iter = nbIter(x, y);

//Si il existe |Zn|² < 4, le nombre complexe n'appartient pas à l'ensemble de Mandelbrot.

//On détermine alors une couleur dépendant de iter.

if (iter < maxIter) {

color = 3*255 - Math.floor(3*255 * (iter / maxIter));
color1 = 0;
color2 = 0;
color3 = 0;if (color <255) color1 color;if (color > 255 && color <511) color2 color-255;
if (color > 511) color3 = color-511;
ctx.fillStyle = 'rgb(' + (color1) + ', ' + (color2) + ', ' + (color3) + ')';

} else {

ctx.fillStyle = '#000000';

}

ctx.fillRect(x, y, 1, 1);

}

}

} else {

alert('Vous utilisez un navigateur qui ne supporte pas la technologie Canvas.');

}

}
Rejoignez-nous