Друг натолкнулся на квадратную функцию кривой Безье в своей кодовой базе, которая использовала гигантское гнездо крыс таблицы переключателей для выполнения вычислений. Он бросил мне вызов найти одно короткое выражение, которое позволило бы ему заменить гигантский блок кода.Является ли это разумной реализацией квадратичной функции Безье в OCaml?
При попытке удовлетворить два разных любопытства, я подумал, что попробую реализовать функцию в OCaml. Я очень новичок программист OCaml, и я также не знаком с этой функцией, и эта специфическая реализация трудно найти через Google.
Очень ценятся как характеристики, так и правильность функционирования, а также его реализация.
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.);;
list.rev codepath не повлияет на рекурсию хвоста b2i. Хорошая идея на эпсилон. Вероятно, p1 и p2 тоже должны стать аргументами. – Thelema