Golf ball? Evenly spaced points on a sphere?

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.



points_on_sphere_2019Jul19b.gh (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”.

2 Likes

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?

Thanks
Jeremy

@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 (points_on_sphere_2019Jul19b.gh) 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.
golf_ball_2019Jul20a.gh (54.8 KB)

2 Likes

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


https://patents.google.com/patent/US6572494
4 Likes

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

Jeremy

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:

3 Likes

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”.

I’m asking about your model/suggestion @HS_Kim, not Maxfli’s implementation? They don’t look the same to my eye.

That Maxfli video looks pretty dated. I’d be curious to know if they still place dimples on balls like that, or if it’s better to pack them tighter. There sure does look to be a lot of space between the dimples on that Maxfli ball.

The Titleist Pro V1 has very tight spacing.

About my suggestion , did you investigate aerodynamic riblets?
Here is a link
https://www.google.com/search?q=aerodynamic+riblets&newwindow=1&safe=active&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjM_eSFq-DjAhWwK7kGHSt3BMsQ_AUIESgB&biw=1729&bih=1769

In few words, the hole size , the distance in between and how deep they are depends on (speed, size, etc) Re numbers. There is a formula for riblets.

I think part of why the Maxfli used that configuration was that it combines icosahedral symmetry with a mold parting line (since these were made with 2 part molds) along a great circle (so it divides the sphere into 2 equal sized pieces) that doesn’t pass through any of the dimples


Maybe the way they do the molds has changed since then, since modern golf balls don’t appear to have this clear equator.

The Titleist Pro V1 and V1X look like they have tetrahedral symmetry instead:

1 Like

Their packing still didn’t look quite optimal to me, so I modelled something with the same connectivity as the V1X then optimised for tangency, and was able to improve the packing a fair bit.
Maybe I should give Titleist a call :thinking:


14 Likes

Does it have correct rotational symmetry? Possibly any asymmetry would cause the ball to not fly straight?

Yes, it has the same tetrahedral symmetry as the original

Just had a look at aTitleist Velocity where the pattern is irregular (and to the eye utilises at least four dimple sizes).

Claim: “to generate extremely low spin and even more distance. It produces high flight on all shots to enhance distance and help stop the ball on the green.”

The Velocity appears to use the same 328 dimple tetrahedrally symmetric arrangement as the V1X
It’s not dead easy to spot, but the pair of adjacent valence 5 nodes at the middle of each edge of the tetrahedron give it away:
image

You can use the Transformation constraint together with collisions in Kangaroo to find circle packings with prescribed symmetry:

7 Likes