При движении одной капли она будет знать что слита с другой, и допускать расхождение их центров на определенную дельту, немногим большую чем радиус наименьшей (или наибольшей) капли.
Ну это уже другая, более сложная, задача - учесть силу поверхностного натяжения. Здесь мы считаем что центры шариков двигает кто-то другой, кадр за кадром, а наше дело только корректно рисовать капли.
ну как минимум для каждой капли хранить указатель/ссылку на другие капли с которыми было соприкосновение (если было вообще).
Пока две капли рядом и у них пустые ссылки на других, то проверять пересечение радиусов на слияние. Как только они пересекаются, делать слияние + сохранить указатели друг на друга.
Если число капель меняется от кадра к кадру - то ID вместо указателя. Но в любом случае - как хранить ссылки? Приделать контейнер к каждой капле? Ну так можно быстро сожрать всю память, это на картинке их всего 2, а действительности их сотни тысяч.
И второй, коварный, момент. Допустим капли разъединились и перепонка между ними порвалась (см Step 1). Однако требуется еще какое-то время (возможно неск кадров) пока перепонка полностью исчезнет и капля станет шариком (конечно если нет других связных с ней). И вот что делать на этих кадрах - хз. Считаем "разъединились" - получаем "рывок", перепонка исчезает мгновенно. Считаем "слитыми" - тогда перепонка остается а может и расти, хотя должна плавно исчезать.