Un ami est tombé sur une fonction de courbe de Bézier quadratique dans sa base de code qui utilisait un nid de rats gigantesque d'une table de commutation pour effectuer le calcul. Il m'a mis au défi de trouver une seule expression courte qui lui permettrait de remplacer le gigantesque bloc de code. En essayant de satisfaire deux curiosités différentes, j'ai pensé que j'essaierais d'implémenter la fonction dans OCaml. Je suis un programmeur OCaml très novice et je suis également peu familier avec la fonction et cette implémentation spécifique est difficile à trouver via Google.Est-ce une implémentation raisonnable de la fonction de Bézier quadratique dans OCaml?
Les critiques sur la performance/l'exactitude de la fonction ainsi que sur sa mise en œuvre sont très appréciées.
Mise en œuvre de Quadratic Bézier Curve:
let rec b2 n =
let p1 = -10. in
let p2 = 10. in
let q = n*.n in
let rec b2i n i hd =
if i > n then
List.rev hd
else
let t = i /. n in
b2i n (i+.1.) ((((1.-.t)**2.)*.p1+.(2.*.t*.(1.-.t)*.q)+.(t**2.)*.p2) :: hd)
in b2i n 0. []
;;
let floatprint lst = List.iter (fun f -> Printf.printf "%f; " f) lst ;;
floatprint (b2 8.);;
Le chemin de code list.rev n'affecte pas la récursivité de queue de b2i. Bonne idée sur epsilon. Probablement p1 et p2 devraient aussi devenir des arguments. – Thelema