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

Contenu supprimé Contenu ajouté
Ligne 67 :
===Représentation dans l'espace===
 
ImageJ permet aussi de convertir une surface donnée par ses lignes de niveau comme ci-dessus, en une représentation graphique sous forme d'une surface dans l'espace. De même que ci-dessus, on va donc créer une image où les niveaux de gris représentent une fonction <math>z=f(x,y)</math> et la faire convertir par ImageJ en dessin de la surface correspondante, vue en perspective. La fonction <math>z=f(x,y)</math> considérée est la somme des distances entre le point de coordonnées (i,j) et les points de coordonnées respectives (200;50), (100;350) et (350;350) (''Attention'': L'axe des ''y'' est orienté vers le bas). On sait depuis [[w:Fermat|Fermat]] et [[w:TorriccelliTorricelli|TorriccelliTorricelli]] que cette fonction atteint son minimum en un point appelé ''point de Fermat-TorriccelliTorricelli'' du triangle dont les sommets sont donnés ci-dessus.
 
L'image sera en noir et blanc, sur 65536 niveaux de gris (''16-bit''), et les instructions ''moveTo'' et ''lineTo'' (méthodes de l'objet ''ip'', lui-même processeur d'image défini sur l'objet ''plan'' qui est une instance de la classe ''image'') servent à dessiner le triangle en blanc par-dessus la représentation de la somme des distances:
 
<source lang="javascript">
var N=400;//taille de l'image
IJ.newImage("Fermat", "16-bit", N, N, 1);//création de l'image en noir et blanc
plan = IJ.getImage();//création du dessin plan (lignes de niveau)
ip = plan.getProcessor();//les filtres du plan dans ip
for(var i=0;i<N;i++){
IJ.showProgress(i, N-1);//on regarde où on en est
for(var j=0;j<N;j++){
d=Math.sqrt(Math.pow(i-N/2,2)+Math.pow(j-N/8,2));
//la distance de (i,j) à (N/2,N/8)
d+=Math.sqrt(Math.pow(i-N/4,2)+Math.pow(j-7*N/8,2));
//plus la distance de (i,j) à (N/4,7N/8)
d+=Math.sqrt(Math.pow(i-7*N/8,2)+Math.pow(j-7*N/8,2));
//plus la distance de (i,j) à (7N/8,7N/8)
c=Math.round(d*64-32*256);//le niveau de blanc est la somme des distances
ip.putPixel(i, j, c);//normalisée empiriquement
}
}
ip.setColor(255);//le triangle est dessiné en blanc
ip.moveTo(N/2, N/8);//origine du premier segment
ip.lineTo(N/4, 7*N/8);//tracé du premier segment
ip.lineTo(7*N/8, 7*N/8);//tracé du second segment
ip.lineTo(N/2,N/8);//retour au départ pour fermer le triangle
plan.updateAndDraw();//affichage une seule fois, pour gagner du temps
</source>
 
==Dessin de fractales==