Bonjour,
(Bon, tout d'abord, je préviens : je suis un grand amateur en programmation, merci d'être indulgent et de ne pas me découper en rondelles
). Voilà, j'essaie de programmer la décomposition en produit de cycles une image selon une transformation donnée bijective (les pixels étant représentés par un enregistrement {X:int, Y:int}, une image étant représentée par une matrice m*n de m*n pixels (les seuls paramètres dont qu'on prend en compte ici sont les paramètres m et n de la matrice, (on transforme les pixels de la matrice en fonction de leur coordonnées uniquement, pas de leur "contenu" ie leur couleur par ex.) ;la transformation, linéaire, sur les points étant donnée par une matrice "transformation" ) Ca donne ça :
Code :
type point ={X:int;Y:int} ;; let transformation = make_matrix 2 2 0;; transformation.(0).(0)<- 1 ;transformation.(1).(0)<-1 ;transformation.(1).(1)<-(-1) ;; (je définis ma matrice de transformation) let transformer point n m t = match point with {X=i;Y=j}-> let i’=(t.(0).(0)*i + t.(1).(0)*j) mod m and j’=(t.(0).(1)*i + t.(1).(1)*j) mod n in {X=i’;Y=j’};; (fonction qui transforme un point de coordonnées i,j en un point de coordonnées i',j') let produit_cycles image transformation = let n = vect_length image and m = vect_length image.(0) in let test = (make_vect n (make_vect m false)) and resultat = ref [] in for i = 0 to (n-1) do for j=0 to (m-1) do if not test.(i).(j) then let cycle = ref [{X=j;Y=i}] and pointeur = ref (transformer ({X=j;Y=i}) n m transformation) in test.(i).(j) <- true; while !pointeur <>{X=j;Y=i}do cycle := !pointeur::!cycle; test.(( !pointeur).Y).((!pointeur).X) <- true ; pointeur := transformer !pointeur n m transformation done ; resultat := (!cycle)::!resultat done done ; !resultat;;
|
Le compilateur accepte mon programme
mais dès que je veux l'appliquer à une matrice, il m'affiche invariablement un " Invalid_argument "vect_item"". Je ne vois pas où une matrice est incorrectement indicée.
Je sais que tout ceci est un peu brouillon et manque de clarté, mais une aide serait la bienvenue.
Merci d'avance!
Message édité par gilou le 06-05-2008 à 23:21:07