Реализация 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;
]
];
После выполнения этой ячейки цепь оживет