Affichage des articles dont le libellé est maths. Afficher tous les articles
Affichage des articles dont le libellé est maths. Afficher tous les articles

mercredi 26 décembre 2007

Transformée de fourrier lente 2D

Bon les maths c'est pas mon truc. J'ai vaguement compris ce qu'était la transformée de fourrier, et il fallait l'implémenter dans le langage de notre choix. J'ai commencé en PHP, le langage le plus commode :

J'ai d'abord découpé l'image d'entrée en un tableau d'entier a deux dimentions (entier équivalent à unsigned char). Ceci était pour optimiser la vitesse de lecture des pixels.

J'ai ensuite 4 boucles imbriqués qui, pour chacun des pixels (i, j), alors faire la somme d'un calcul complexe pour chacun des pixels de l'image (i,j).

Puis la recomposition de l'image en écrivant pixel par pixel les valeurs du tableau.

Problème, l'implémentation des complexes, notamment exp(-2*i*val) était ennuyeuse. J'ai sèché. Le problème a été résolu en C#, après avoir revu des formules sur les complexes : j'aurai du écouter en terminale !

CSG to Voxel

Bien que ce n'est pas un langage que l'on utiliserait habituellement pour faire ceci, je dois dire que l'implémentation des expressions régulières en PHP est si simple, que le PHP devient dans ce cas un langage très utile.

J'ai créé un convertiseur de fichier CSG (*.pov, de PovRay) vers un autre fichier CSG mais qui ne créé lui que des voxels (pixels volumétriques).

Dans un premier temps, je traite le fichier d'entré pour éliminer les parasites (les structures de contrôle, les commentaires, les lignes vides), puis je met les accolades au bon endroit.

Ensuite je parcours ce fichier ainsi nettoyé pour traiter les formes a dessiner en 3 temps. Premier temps, est la détection de la forme : {. A partir de ceci, toutes les lignes suivantes, sauf si cette ligne vaut précisément }, alors fait parti de la définition de la forme. Selon la forme courante, j'attends différents paramètres (coordonnées, diamètre, rotation, translation) que je stock dans un tableau temporaire, lequel est lu lors de la détection de l'accolade fermante (accolade qui doit être de la même profondeur que lors de l'ouverture avec la définition de la forme) et j'écris sur le fichier de sortie mes Voxels.