Golf ball? Evenly spaced points on a sphere?

Did you unblock the plugin before installation?

No. Though I’ve heard that mentioned before, I don’t know how to do it? I didn’t have to do it with ‘BoltGen’ earlier. I managed to navigate to the plugin folder in File Explorer but haven’t found a block/unblock option anywhere in ‘Properties’? And yes, of course I then searched the forum for help, to no avail so far.

This is ridiculous.

Without a doubt, Rhino/GH is the most user-unfriendly software I’ve ever used extensively!

This thread is the first time I’ve ever asked a question on this “new” forum, and didn’t ask many on the old forum either. The experience has been brutal, not for the feint of heart!

Some plugins that are provided as installer package usually don’t need to be unblocked, but most of the plugin installation instructions require unblocking .gha or .dll from window protection.(RMB pop up–> properties)

I already said I tried that. Are you trolling me? Exasperation has set in… :man_facepalming:


What make you think I’m trolling you? I was just trying to let you know if it would help.


Forgot to post the file for the Weaverbird version earlier: (16.4 KB)

1 Like

This is ridiculous.

Without a doubt, Rhino/GH is the most user-unfriendly software I’ve ever used extensively!

FYI in the case of blocked files (which it seems yours are not) that is a windows thing, not a Rhino/gh thing. Windows often blocks file types that are not well known (.gh) especially if you have strict firewall / server settings.

Evenly spaced points on a sphere?

Using Grasshopper

  • First make a platonic solid around the ball
  • Subdivide each surface with a middle point for getting tringles (maintaing the same radius as dicstans altitude from the ball centre)
  • Subdivide triangles and so on
  • Use the point of the triangle to create a circle.
  • Aerodynamically is better if you calculate the riblets holes size and distance between. There is a formula for that in relation to Re.

I presume is better to have a deeper hole for aerodynamic reasons. or at the list at the edge having a sharp edge according to old NACA study. Instead of holes, you can try turbulators that pops out instead of pop in holes.

Did you spot that the Titleist ball shown has dimples of different radii? You can’t achieve that with anything generating a regular grid…

Memo to self: however interesting a problem, do NOT get sucked into another challenge!

Thank you again very much @DanielPiker, that’s a beautiful thing. But…

  • I see no way yet to set a specific number of holes? 642 is too many. Changing the ‘L’ (Level) input to wbLoop from 3 to 2 brings the hole/dimple count down to 162. Nothing in between?
  • The circles are not all the same size. That makes it harder in several ways, like covering a specific percentage of the surface (“78% or more”) with dimples. And creating the dimples with regard to depth and variable diameter.
  • No way to change the radius of the sphere? Changing the ‘W’ (Radius) input to wbIcosahedron has no effect? I guess the idea is that you can pull points to any size sphere?
  • It’s a mesh, not a nurbs surface.

I spent considerable time polishing the Kangaroo model to get proper scale, ~79% coverage by dimples with depths of 0.007 thousands of an inch. Not quite there yet but looking good. Will post code soon.

The greatest obstacle is decoupling Kangaroo output from the Anemone loop I’m using to SDiff the dimples, one at a time. The machine locks up any time parameters are changed that trigger Kangaroo, which in turn triggers Anemone. It’s SO EASY to forget and freeze the poor little laptop for absurdly long periods, often requiring the kill switch. :frowning:

If it’s not a Windows thing, I guess that puts the ball back in Rhino’s court, eh?

Yes, but I’m not trying to replicate that.

If it’s not a Windows thing, I guess that puts the ball back in Rhino’s court, eh?

Dunno, Dun care, works for me :man_shrugging:, just explaining the blocked file epidemic

When there are complex operations downstream of the Kangaroo solver, it’s often helpful to include a Data Dam component - that way you can stop every solver update triggering a calculation, and only apply the post process when you click the dam

Naturally, I reached for Data Dam to staunch the flow of useless CPU cycles, but in the evolution of the model, managed many times to either put it in the wrong places or bypass it and trigger costly freeze-up operations while Kangaroo was still working. Would be nice if Data Dam could be triggered by an “OnConverge” event from Kangaroo?

Then spent a tremendous amount of time and effort trying to understand why the dimples weren’t aligned with the holes from Kangaroo. Eventually, to study it further, I reverted from the ‘Fast’ Anemone components to the slower (but more fun to watch) ‘Classic’ bits… Lo and behold, that fixed it!
(might be faster with yellow preview of cutter disabled?)

The thin blue circle above the golf ball represents the diameter of the “dimple cutter” sphere used to SDiff each dimple, one by one, to a depth of 0.007 inches. 336 holes. (46.2 KB)

There is a group not shown at the bottom to “analyze: dimples as % of surface” that shows 76.3% coverage. Slightly below the official “78% or more” target, but I’m calling victory on basic functionality of the model, posting it as is and taking a break. Might play later with params like the PopGeo seed, ‘pctSrf’ target and ‘colSphF’ factor (ratio) that affects ‘radius sphere collide’ used by Kangaroos’s SphereCollide component to get a little more coverage but I’m so relieved to get this far. Thank you again @DanielPiker, Kangaroo is wonderful and so are you. Aloha.

P.S. Since this code isn’t based on polyhedra, it might be worth trying to bypass the rounding
in group Round to multiple of "Platonic values".

P.P.S. Guess I should have played with this for a few more minutes before posting. As you reduce the ‘numPts’ slider, the dimples get bigger and there comes a point when the blue circle (cutter pattern) flips over and breaks the model. Solution is very simple; just increase ‘dimple depth’, either with a slider or the ratio of ‘gbRadius’ (1/2 “golf ball diameter”) to dimple depth: 0.84 / 0.007 = 120. Same goes for increasing ‘golf ball diameter’.

Also, it pays to set Rhino 'File | Properties | Mesh to “Slow & smoother”, ‘Units | Absolute tolerance’ to 0.001, and ‘Model units’ to “Inches”.

1 Like

Hi @Joseph_Oster,
I haven’t used Kangaroo yet and am struggling to understand that part of your program. Could you please explain briefly what is happening?
And are you looping the sdiff one at a time because doing them simultaneously would overwhelm gh?


@DanielPiker wrote that (essential!!) portion of the model, posted above:

I’ve looked at (marveled at) some Kangaroo models over the years but never invested the time and effort to build my own or truly understand how they work. Being more invested in this one, I studied it a bit closer, even after posting the model here three days ago, trying to understand the effect of changing the ‘R’ (Radius) input to the Kangaroo SC (SphereCollide) component…

The code I added around Daniel’s much simpler model was to adapt it specifically to a golf ball, including a nudge factor ‘colSphF’ slider that is multiplied by the intended ‘dimple radius’ to slightly increase the SC ‘R’ input (“radius sphere collide”). I did this to keep the dimples from touching each other without really understanding its full effect. After posting the model ( and exploring the effects of changing that nudge factor (the model fails in various ways with any value other than 1.1), I finally realized what I had done.

The Solver knows nothing about the sphere that represents the golf ball. Its three ‘GoalObjects’ inputs, each with different ‘Strength’ values, are:

  • Anchor (the center point of the sphere, Strength = 10000)
  • Length(Line) (the lines from the center point to each PopGeo point, Strength = 10) and
  • SC (collision of spheres centered at each PopGeo point, , Strength = 1)

From what I can tell, the solver is slightly adjusting the line lengths (along with point locations) to minimize collisions. The points from the Solver ‘V’ output are not necessarily on the surface of the sphere. I don’t know why it returns points, or why there is an extra point (the anchor?) that is discarded by the Split List , but this insight was significant for me.

Pulling those points to the surface of the sphere can cause unwanted dimple overlap and/or failure of SDiff at some of the points. Not doing so probably means that the diameter of the dimples are not all identical? Trade offs, complicated by trying to maximize dimple coverage and match official golf ball specs. I better leave it at that.

Yes. Trying to do them all at once often results in failure, sometimes missing only a few dimples, other times failing to complete at all.

This version has minor UI improvements (a feeble “fix” for the Data dam leak at startup) but no significant differences to the algorithm. I started to make it more flexible about scale (“golf ball diameter”) by using a ‘gbRatio = 120’ for dimple depth but quickly realized that it’s more complicated and must account for ‘numPts’ (how many dimples) and/or ‘pctSrf’ (percent of surface to be covered by dimples) so gave up on that for now. (54.8 KB)


Here’s the MaxFli DDH pattern, which has 360 dimples

Thanks for the detailed explanation - you wrote far more than I had any right to expect.


It would be much easier to model this ball’s dimple pattern than other patterns using a “Platonic Dodecahedron”. Make only one side and Orient.:grinning:


What percentage of this golf ball’s surface area is dimples? Ideally, it should be 78% or more, according to what I read. Also, spacing of dimples near the edges of adjacent faces of the dodecahedron doesn’t look like optimal “circle packing”?

From the grainy video (below):

I’m afraid you’ll have to check with the manufacturer of “MaxFli DDH” for your curiosity. Their interests don’t seem to be in perfect circle packing.
According to the video, they seem to care about “Large dimples for more distance, small dimples for more control”.