Я бы вообще делал через canvas и requestAnimationFrame. На мой взгляд, сама суть нужной вам анимации несколько выходит за рамки предназначения CSS-анимаций.
Вот,
нагуглил алгоритм, который реализует примерно то, что вам нужно. Разумеется, из соображений производительности стоит максимально уменьшить площадь применения алгоритма.
Ещё, как вариант, вы можете всё это
замутить на svg.