Вы пытаетесь изготовить гексагональную упаковку , а не квадратную упаковку.
![alt text](https://i.stack.imgur.com/5Bkfa.gif)
Вертикальное расстояние между центрами окружностей должно быть меньше диаметра, потому что вершины второго ряда заполняют отверстия между низами первого ряда, в результате чего ограничивающие рамки первых двух рядов слегка перекрываются. Обратите внимание, что на первом рисунке всего пять рядов окружностей, а на втором - шесть рядов, несмотря на то, что вторая упаковка не занимает гораздо больше места по вертикали.
Фактическая разница высот между строками - это высота равностороннего треугольника со сторонами, равными диаметру вашего круга, которую можно рассчитать, например, с помощью теоремы Пифагора,
Попробуйте y_position = sqrt(3)/2 * diameter * y
.