I have a task where I need to distribute hexagonal tiles of fixed dimensions across a surface. There should be a gap between the tiles, and this gap needs to be adjustable. A perfect, tight fit to the surface is not required — it is acceptable (and even preferable) to use a best-fit or approximated surface for the placement.
Could you please advise whether this is possible to achieve in Grasshopper, and which tools or components would be best suited for this?
ChatGPT suggests that it might be best to use the Bouncy Solver. Is that correct?
Definitely something you can do in Grasshopper, and you might not even need Kangaroo. The surface doesn’t look like it has a massive amount of curvature to it, so you might get away with something like:
Use Contour to make evenly-space lines across the surface
Divide the lines into segments (offset on alternating lines to create the hexagonal grid)
Evaluate Surface at that location to get the Normal and Plane
Align Plane with one of the cardinal directions
Orient a hexagon to each point.
Include a tolerance in your hexagon size.
Use this image to work out your contour spacing and divisions
Actually, having played with it a bit, you probably get the best results by simply projecting a flat hex grid onto it from above. Any attempt to make the grid conform to the surface in one direction just makes it overlap in the other.
Hi Tom, thanks for the suggestion.
I was actually thinking about a hybrid approach:
first project a flat hex grid onto the mesh, and then use BouncySolver just to slightly relax the centers so they don’t overlap and keep a clean spacing.
Ideally, we’d want the hexes to collide with each other, not their centres. But this is tricky when the 2D shapes are not all constrained to a 2D plane. You can’t use sphere or rod collision because the tiles overlap at their edges when the surface curvature is high. See how these pairs of points can just slip over each other: