Bonjour,
je ne suis pas sûr que ce message trouve bien sa place ici, mais j'aurais besoin d'aide concernant un programme en Caml (je ne suis pas expert en al matière, merci d'être indulgent )
Voilà, j'essaie de programmer la décomposition d'une image (représentée par une matrice m*n, chaque case représentant un pixel de l'image) en cycles à support disjoint selon une transformation bijective donnée (en fait je détermine les différentes orbitales d'une permutation sur un tableau de m*n pixels), la transformation étant définie par une matrice 2*2.
Un point est donc représenté par un enregistrement {X:int;Y:int},
Ca donne ça :
let transformation = make_matrix 2 2 0;;
transformation.(0).(0)<- 1 ;transformation.(1).(0)<-1 ;transformation.(1).(1)<-(-1) ;; (je définis ma transformation linéaire)
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’};;
et enfin :
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;;
Caml Light ne m'envoie aucun signal d'erreur quand je lui soumets le programme, mais affiche un "vect_item" dès que j'essaie de l'appliquer à une matrice. Je ne vois pas où il peut exister une erreur d'indiçage. Pourriza-vous m'aider?
Merci d'avance!
-----