Необходимо анимировать path из первого состояния во второе (как показано на изображении).
Анимацию реализовал на Snap.svg:
s = Snap(485, 788);
var path = s.path("M235.4 216.8c-27.1-8.1-47.8-53.5-47.8-108.3 0-42.7 12.6-79.7 31-97.8C228.7 1.5 235-11.7 235-26.5c0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 14.7 6.3 28 16.4 37.2 18.4 18.1 31 55.1 31 97.8 0 54.8-20.7 100.2-47.8 108.3C56.6 238.8 0 310 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-84.3-56.7-155.5-134-177.5z").transform('r35.9,184,394');
setTimeout(function() {
path.animate({ d: "M201.6 210.5c-8-.7-14-4-14-8 0-3.1 3.7-5.8 9.1-7.2 22-5.4 38.3-25.2 38.3-48.9 0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 23.6 16.3 43.5 38.3 48.9 5.4 1.4 9.1 4.1 9.1 7.2 0 4-6 7.3-14 8C73.7 219.1 0 298.1 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-96.2-73.8-175.2-167.8-183.8z" }, 1001,mina.linear).transform('r90,184,394');
},1000);
setTimeout(function() {
path.animate({ d: "M235.4 216.8c-27.1-8.1-47.8-53.5-47.8-108.3 0-42.7 12.6-79.7 31-97.8C228.7 1.5 235-11.7 235-26.5c0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 14.7 6.3 28 16.4 37.2 18.4 18.1 31 55.1 31 97.8 0 54.8-20.7 100.2-47.8 108.3C56.6 238.8 0 310 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-84.3-56.7-155.5-134-177.5z" }, 1000,mina.linear).transform('r35.9,184,394');
},2500);
setTimeout(function() {
path.animate({ d: "M201.6 210.5c-8-.7-14-4-14-8 0-3.1 3.7-5.8 9.1-7.2 22-5.4 38.3-25.2 38.3-48.9 0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 23.6 16.3 43.5 38.3 48.9 5.4 1.4 9.1 4.1 9.1 7.2 0 4-6 7.3-14 8C73.7 219.1 0 298.1 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-96.2-73.8-175.2-167.8-183.8z" }, 1000,mina.linear).transform('r90,184,394');
},5000);
setTimeout(function() {
path.animate({ d: "M235.4 216.8c-27.1-8.1-47.8-53.5-47.8-108.3 0-42.7 12.6-79.7 31-97.8C228.7 1.5 235-11.7 235-26.5c0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 14.7 6.3 28 16.4 37.2 18.4 18.1 31 55.1 31 97.8 0 54.8-20.7 100.2-47.8 108.3C56.6 238.8 0 310 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-84.3-56.7-155.5-134-177.5z" }, 1000,mina.linear).transform('r144.1,184,394');
},7500);
path {
transition:transform 1s linear;
}
<script src="https://cdn.jsdelivr.net/snap.svg/0.1.0/snap.svg-min.js"></script>
Проблема в том, что положение "большего" круга фигур должно оставаться неизменным. Вместо этого, оно "скачет" и сама фигура выходит за пределы svg в процессе анимации. Предположу, что это происходит из-за разного "размера" конечных состояний, но как это исправить - не знаю.
Как можно решить эту проблему?
Возможно, есть другие варианты такой трансформации для path?
Код svg с дефолтными состояниями фигур:
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 485 788" xml:space="preserve"><style>.st0{fill:#000}</style><path class="st0" d="M235.4 216.8c-27.1-8.1-47.8-53.5-47.8-108.3 0-42.7 12.6-79.7 31-97.8C228.7 1.5 235-11.7 235-26.5c0-27.8-22.5-50.3-50.3-50.3s-50.3 22.5-50.3 50.3c0 14.7 6.3 28 16.4 37.2 18.4 18.1 31 55.1 31 97.8 0 54.8-20.7 100.2-47.8 108.3C56.6 238.8 0 310 0 394.4 0 496.4 82.7 579 184.7 579s184.7-82.7 184.7-184.7c-.1-84.3-56.7-155.5-134-177.5z"/><path class="st0" d="M369.3 394.4c0 102-82.7 184.7-184.7 184.7S0 496.4 0 394.4c0-96.3 73.7-175.3 167.7-183.9 8-.7 14-4 14-8 0-3.1-3.7-5.8-9.1-7.2-22-5.4-38.3-25.2-38.3-48.9 0-27.8 22.5-50.3 50.3-50.3s50.3 22.5 50.3 50.3c0 23.6-16.3 43.5-38.3 48.9-5.4 1.4-9.1 4.1-9.1 7.2 0 4 6 7.3 14 8 94.1 8.6 167.8 87.6 167.8 183.9zM177.2-76.8h15-15z"/></svg>


viewBoxотсутствует - если добавите к примеруviewBox="0 0 800 700"то начнёт работать более менее – Резидент Казахстана Jun 26 '20 at 21:03