Bonjour !
Actuellement en train de faire un tp de programmation fonctionnelle en ocaml, j'aurais besoind d'aide afin de créer unf fonction.
L'énoncé est le suivant :
Définir la fonction intersect_figure : float -> coord -> figure -> char option telle que intersect_figure grain p f retourne None si le point p est en dehors de la figure f, ou Some c où c est la couleur de f sinon. L'intersection se déroule en deux étapes : I. le point p est tout d'abord replacé dans le repère relatif à la figure f 1. en faisant la translation inverse de p par rapport au centre de la figure, puis 2. en faisant la rotation inverse par rapport à l'angle de la figure; II. une fois dans le bon repère, l'intersection dépend de la nature de la figure, en supposant que (px,py) sont les coordonnées relative de p dans f : cercle : pxpx+pypy=<rr où rr est le carré du rayon du cercle …
L'énoncé continue ensuite pour le rectangle et la ligne, mais pour l'instant mon problème est sur le premier point.
Le type figure est défini comme :
1 2 3 | type figure = Figure of char*(float*float)*float*fig_spec ;; |
Le type coord est défini comme :
1 | type coord = Coord of float*float ;; |
Voici mon code :
1 2 3 4 5 6 7 8 9 10 | let intersect_figure grain p f = let Figure(_,cent,ang,_) = f in let Coord(px,py) = p in let p2 = inv_translate_point p cent in let p1 = inv_rotate_point p2 ang in match f with | Figure(x,_,_,Circle r) -> if px*.px+.py*.py <= r*.r then Some x else None | Figure(y,_,_,Rectangle (w,h)) -> if float_abs(px) <= w/.2. && float_abs(py) <= h/.2. then Some y else None | Figure(z,_,_,Line l) -> if float_abs(px) <= l/.2. && float_abs(py) <= grain then Some z else None ;; |
Je pense que le problème se situe dans le fait que je n'arrive pas à faire en sorte que le point p soit replacé dans le repère relatif à f …
Je cous remercie par avance pour vos réponses/aides !