Интересная проблема.
Off верхней части моей головы, вот как я мог бы справиться с этим:
Расчет точки пересечения 2-х кругов (я нашел эту ссылку, что: Circle-circle intersection points)
Вычислить диапазоны дуги пересекающихся частей каждого круга.
Расширить диапазон дуги на несколько градусов. Определите дуги для остальных частей каждой окружности (части, которые будут нарисованы «не-gooey»)
Используя триггер и Catmull-Rom splines, создайте замкнутую траекторию для внешних «невзаимных» частей каждого круга.
Алгоритм Catmull-Rom должен заполнить промежутки между двумя частицами, используя плавные кривые, которые очень похожи на круги «Gooey», которые вы показываете.
У меня есть проект на GitHub, который включает Swift код для создания Catmull-Rom сплайны из серии точек: Trochoid demo
Этот проект создает открытые кривые, не замкнутые контуры. Техника создания сглаженных замкнутых траекторий с использованием сплайнов Catmull-Rom немного отличается. У меня есть другой проект Github под названием RandomBlobs (написанный в Objective-C), который создает сглаженные замкнутые пути. Вы должны иметь возможность решить, как изменить код Swift для создания закрытых путей из кода Objective-C. Это было достаточно долго, так как я написал код RandomBlobs, который не помню точно, что я сделал.
Я не уверен, что описанный выше подход будет достаточно быстрым, чтобы рисовать в режиме реального времени, но я уверен, что так будет. Этот проект TrochoidDemo делает лот триггера для каждого кадра анимации, и его анимация довольно плавная. Если ваш проект недостаточно плавный, вам может понадобиться сделать некоторую оптимизацию.
Таким образом, вы хотите иметь этот эффект, когда пользователь взаимодействует с этим кругом, а затем эффект, который происходит, когда два круга встречаются или уходят. Правильно? –
вычисление точек текущей фигуры для кривой Безье может быть выполнено __ [элементарная геометрия] (https://en.wikipedia.org/wiki/Tangent_lines_to_circles) __; Я рекомендую это чтение как хорошее начало. – holex
Возможно, вы можете получить вдохновение в технике этого: https://github.com/yoavlt/LiquidFloatingActionButton – Lapinou