Flat Spiral Power Spring with Variable Pitch?

Hello. I am having a difficult time trying to create a flat spiral power spring (clock type spring) that has a variable pitch that begins with wide spacing between the rotations at the center and gradually decreases the spacing while increasing the rotations toward the outside. I’ve attached something similar to what I’m looking for. I made it in Rhino using spiral tool by measuring out each rotation accordingly, beginning and ending with the next rotation. The issue with this is its not perfectly smooth where the rotations connect which is not ideal for a spring. You can see the geometry becomes messy at these points. Grasshopper is new to me. I’ve put in several hours copying tutorials from videos and also using help from AI and have gotten no where but frustrated. I would appreciate any help or recommendations.


See if this can help.
helix.gh (7.8 KB)

1 Like

This was exactly what I was looking for! You just saved me many hours/days. Now I’ll work on understanding each component and how you got there. Thank you!

scripting

@leopoldomonzani
nice solution - but a pity you wrote a script that is close to obfuscation…

    k = 0
    d = 0
    For e = 0 To n - 1
      For g = 0 To 7
        c = g * math.PI / 4
        l = l + (e - n) * math.abs(h) '''decreasing steps
        p(0) = l * Math.Sin(c)
        p(1) = l * Math.Cos(c)
        p(2) = 0
        pp(k) = p
        k = k + 1
      Next
    Next
    a = pp

@Nick_Siebenmorgen
the script basically calculates 8 points per turn and then interpolates over those points.
for each turn the step the radius is increasing gets smaller.
This decreasing stepsize will make thespiral more dense to the outer radius.
But notice - within each turn, this stepsize is constant !!!
so more or less the script is similar to your initial approach - draw one spiral per turn, - but now draw 8 Points pre turn and then interpolate them (_InterpCrv)
The correct approach would be to have an inclination / stepsize that is constantly decreasing.

look at the wikipedia article

there are different approaches to get a bounded spiral.
which one are you after ?
This will determine the correct algorithm to get precise points to interpolate through.

and - depending on what you re after you might need to vary the amount of points that you interpolate on. this would mean to start with for example 8 points per turn, measure the deviation, increase the amount of interpolated points.
So what is the usage of your data ? which tolerance do you need ?

model without script

boundedSpiral_00.3dm (153.6 KB)

there is a nice approach that does not require scripting:

revolve a line to get a disk-like surface.
_line
_revolve
_copy the disk to get a second disk.
now draw a flat spiral
_spiral flat
turn on history
_history
now
_flowAlongSrf the spiral to the second disk (copy = yes)
now for the second / target disk:
_pointsOn
select the center Control-Point
_weight
decrease the weight for the center. (in my example from 1.0 to 0.2)
history will update the deformation of the flowed spiral.
:face_with_diagonal_mouth:

kind regards -tom

2 Likes

I probably should examine and think about this more…

This solution uses standard GH components, no VB script.


spiral_flat_2025Jan23a.gh (13.2 KB)

As always, adjusting the Graph Mapper and sliders affects the result.

2 Likes

this is also a very dirty sketch that uses Point Polar component to do something similar, but in its current state it’s not a “precise tool” at all, as it only allows for chosing the final radius, everything else is visual on the graph mapper (meaning you can’t say for instance “first 3 turns with this pitch, and the rest with this other pitch”, you have to graph that)

Variable_pitch_visual_spiral.gh (15.2 KB)

1 Like

I now believe our minds are connected :slight_smile:

2 Likes

You are more patient with newbies than I am, able to read their minds despite poor descriptions. I’m not sure that’s always a good thing though… :thinking: :wink:

2 Likes

I think at least 75% of the patience comes from the thing of experiencing the language barrier myself :slight_smile: I’m ofter in situations where I have to find creative interpretations for my own english words/sentences, and for that reason I also give creative translations to other’s :slight_smile:

2 Likes

Joseph, this is a different solution to the first post and opened my eyes how things can be done multiple ways in Grasshopper. I messed around with it and I’m basically getting what I was looking for. I’m still learning so have spent some time analyzing your choice. Is it from many hours of experience you know what components to choose and connect?

Tom, I’m experimenting with different geometries I plan to 3d print and analyze the force curve. One will be like I originally posted, the pitch will have the most space at the center and gradually decrease at the same rate toward the outer radius. One will have all the rotations concentrated on the outer radius. I’ll also be experimenting with variable tapering widths of the spiral wall. I can do this with sweep tool in Rhino. Your description and solution really helped me out. I appreciate it.