« Programmation objet et géométrie/Objets en Python sous Gimp/Programmation JavaScript sous ImageJ » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 21 :
Sous ''ImageJ'', on doit ouvrir une console par ''Plugins>New>JavaScript'' puis y taper le script ci-dessus. Ensuite le raccourci clavier ''Control+R'' lance le script, ce qui a pour effet d'ouvrir une fenêtre dans laquelle se trouve sous forme d'un tableau, donnant en première colonne les entiers successifs, et en deuxième colonne les valeurs successives de la suite. Ce tableau est exactement ce dont l'outil ''Curve Fitting'' d'''ImageJ'' a besoin. Il suffit alors de copier ce tableau (''Control+A'' puis ''Control+C'') puis de le copier dans l'outil en question (accessible par ''Analyse>Tools>Curve Fitting'' qui crée un tableau où il faut remplacer les données actuelles par celles créées par JavaScript). Après choix du polynôme de degré 4 (tâtonnements précédents ou intuition), on obtient ceci:
 
[[image:sommecarres.png|center]]
 
L'image porte assez d'informations pour qu'on voie que l'expression est exacte (parce que le carré du coefficient de régression est égal à 1), polynomiale (on l'a choisie telle), de degré 3, et ayant ''x'' comme facteur. Il ne reste alors plus qu'à reconnaître des fractions dans les coefficients, puis à effectuer la factorisation, par exemple avec un logiciel de calcul formel, mais ceci est une autre histoire...
Ligne 63 :
Comme il y a beaucoup de nombres premiers entre eux, l'image obtenue est sombre:
 
[[image:pgcd.png|center]]
 
===Représentation dans l'espace===
Ligne 103 :
Comme c'est une image en noir et blanc, ImageJ permet automatiquement de tracer la surface, avec ''Analyse>Surface Plot'':
 
[[image:FermatBW2.png|center]]
 
==Dessin de fractales==
 
Tout ce qui précède peut servir à construire des images fractales en JavaScript:
 
===Sierpinski===
 
Le triangle de Sierpinski, version ''IFS'', est placé dans un objet appelé ''flocon'', qui est une instance de la classe ''image'':
 
<source lang="javascript">
IJ.newImage("Sierpinski", "RGB", 400, 400, 1);
flocon = IJ.getImage();//là où on mettra le flocon
ip = flocon.getProcessor();//cet objet contient les filtres
var x=Math.random()*400;
var y=Math.random()*400;
var xx, yy, c;
for(var i=0;i<100000;i++){
de=Math.ceil(Math.random()*3);
switch(de){
case 1: {
xx=(x+200)/2;
yy=(y+50)/2;
c=255*256*256;//rouge
break;
}
case 2: {
xx=(x+350)/2;
yy=(y+350)/2;
c=255*256;//vert
break;
}
case 3: {
xx=(x+50)/2;
yy=(y+350)/2;
c=255;//bleu
break;
}
}
x=xx;
y=yy;
ip.putPixel(Math.round(x), Math.round(y), c);
}
flocon.updateAndDraw();//affichage du flocon une fois calculé
</source>
 
Le fichier obtenu est celui-ci (en quelques secondes):
 
[[image:SierpinskiImageJ.png|center]]
 
Refaire la même figure en noir et blanc est laissé en exercice. Dans ce cas, on peut utiliser la méthode statistique ''Fractal Box Count'' d'ImageJ pour estimer sa dimension fractale. Le diagnostic d'ImageJ est alors celui-ci:
 
[[image:SierpinskiDimensionImageJ.png|center]]
 
La valeur exacte <math>\frac{\log 3}{\log 2}\approx 1,585</math> est légèrement supérieure à celle estimée par ImageJ.
 
===Julia===