Arranging objects with equal distance to each other on object

Hey everyone!

I need help again with this thing: I want to place as many cylinders as possible on the surface, but it is very important that they do not touch or overlap. Does anyone know how to program this with Grashopper in such a way that the file is also adaptable to other shapes (a different base object as well as a different shape as a cylinder)?

03.03.22_Ellipsoid.3dm (3.0 MB)
distribution.gh (14.3 KB)


As long as your surface is convex, then this is a classical circle packing; search the forum for Daniel piker’s work on this. Once you have the circles packed on your surface, simply extrude normal to the surface

1 Like

Thank you @markz ! I checked many contributions here from @DanielPiker and I am absolutely impressed. Unfortunately, I am still stuck. (I am a beginner :exploding_head:) If I understand it correctly, in a compact circle pack the size of the circles is determined by the mesh, so you cannot determine the size of the circles. In my function, I need to cover the object in different variants, each with different sized objects (one variant with cylinders radius 2, one variant with cylinders radius 3 etc… ) and cannot find a way to do this…

You could also use TriRemesh to create a more or less isotropic triangle mesh. That way you don’t need the circle packing.

triremesh.gh (14.4 KB)

4 Likes