I am wondering if this is translatable into an expression within GH. I have seen people grabbing a method from Wolfram then throwing it into grasshopper - if I search for a regular helicoid equation on wolfram and find:

x(u, v) = u cos(v)
y(u, v) = u sin(v)
z(u, v) = c v

I then intuit this needs to be modified so that the resulting surface respects a spherical boundary. I also guess the task is inherently complex given the different natures of the surfaces. On top of the whole thing I admit I’m truly ignorant here.

How should parameters in those equations be varied so that a resulting surface is ‘confined’ within a spherical boundary in a way that the system can be scaled?

Something I was getting by with was faking a helicoid (mainly a ruled surface of rotating lines around an axis, not via an equation), and then intersecting it with a sphere, however this method is more brute-force than it is reliable.

I found this method by @TomTom , from years ago, to make a general helicoid; would you know how to adapt it?

For you! Because you know what you’re doing unlike me!

Based on my trial-and-errors I was definitely approaching this wrong. Looks like the solution for sure. I am going to both check and learn from it then report back here. I might have a follow-up question just to make sure I grasp the matter. Thank you Adel, for real.

x = sqrt( r^2 - t^2 ) * cos( t / c )
y = sqrt( r^2 - t^2 ) * sin( t / c )
z = t

which means that we can calculate the xyz coordinates of a point on the spherical helicoid as t varies. therefore we need to set up how t varies.

t ranges between -r and r (the radius of the sphere around which the helicoid wraps).

so if r = 3 for example you will have t in the range of [ -3, 3 ]. so we need to sample a number of t values from that range, and this is what this does:

now that we have these values we pass them to the formula. we already know r = 3 and we set a slider for c , a variable which controls how many times the curve goes around the sphere, the lower the number, the more cycles.

the { } means it’s a list, where each value is separated by a comma. we need there values { x , y , z }. so we plug in the equations.

because we specified a return type list, and since it’s three numbers, we can already use those as vertices, and we can pass those vertices to an interpolate curve component

I confess that though the quest was to plot the equation, I prefer geometric approaches. Thank you for looking into it Kevin - it’s beautiful and I will use it.