Реализация FABRIK на WL в пару строк
Текущая реализация далека от оптимальной, но она хорошо подходит для демонстрации работы алгоритма. Среда исполнения используется WLJS Notebook aka Jupyter + Observable для WL

Мы создадим цепочку из точек и свяжем их в сегментированную линию фиксированной длины
chain = Table[Exp[-ϕ]{-Cos[ϕ], Sin[ϕ]}, {ϕ, 0, π - π/7, π/7.0}]; Graphics[{ Line[chain // Offload], Black, PointSize[0.04], Point[chain // Offload], Red, EventHandler[Graphics`Canvas[], { "mousemove" -> handler }] }, Axes->True, PlotRange->{{-1,0.2}, {0,0.4}}, ImageSize->400 ]
Вы увидите окно с цепью, но цепь не будет реагировать на движение мыши. Нужен сам "решатель". Оригинальная статья опубликована в 2010 году, и алгоритм можно реализовать буквально влоб
handler = Function[target, Module[{ buffer = chain, origin = {-1,0}, prev = chain, lengths = Norm /@ (chain // Reverse // Differences) // Reverse }, buffer = Table[With[{p = chain[[-i]]}, If[i === 1, prev = target; target , prev = prev - Normalize[(prev - p)] lengths[[1-i]]; prev ] ] , {i, chain // Length}] // Reverse; buffer = Table[With[{p = buffer[[i]]}, If[i === 1, prev = origin; origin , prev = prev - Normalize[(prev - p)] lengths[[i-1]]; prev ] ] , {i, chain // Length}]; chain = buffer; ] ];
После выполнения этой ячейки цепь оживет
