MoI discussion forum
MoI discussion forum

Full Version: Variable Pitch Helix script

From: bemfarmer
14 May 2014   [#1]
Here is a simple script to create a variable pitch helix, at the origin.
It is based upon mathematics here:
https://www.zwsoft.com/support/zw3d-base-skills/1378
(Updated corrected link Nov 2023)
I did a pdf with additional information and algebra.

Note: For non-variable-radius helix, use the regular MoI Helix command.

Note that some protection from division by zero is included, which could possibly occur due to length of zero, or some negative pitches.
A better programmer might have used catch(e)?
Some negative entries produce different shapes, or no shape at all.
Based upon limited testing, the program does not hang up MoI.

I spent a lot of time trying to graft it onto MoI's helix script, which is fairly complicated, by switching it to an interpcurve, but
finally decided that the user could do a cplane if desired.

- Brian

Attachments:
VarPitchHelix01.zip

Image Attachments:
Case- spiral curve with variable pitch.jpg 


From: Michael Gibson
14 May 2014   [#2] In reply to [#1]
Cool script Brian!

- Michael
From: Martin (MARTIN3D)
14 May 2014   [#3] In reply to [#1]
Great and very useful for modelling springs.
Unfortunately I can't do anything with the .7z file.
Could you upload a zip file?

Martin
From: bemfarmer
14 May 2014   [#4] In reply to [#3]
Oops I forgot to do it in zip format.
Replaced 7z with zip file.

- Brian
From: Martin (MARTIN3D)
14 May 2014   [#5] In reply to [#4]
Thanks Brian. Excellent work!
From: Frenchy Pilou (PILOU)
15 May 2014   [#6]
French version ;) http://moiscript.weebly.com/geacuteomeacutetries-par-bemfarmer.html
(translation of the PDF in few days )


From: DannyT (DANTAS)
15 May 2014   [#7] In reply to [#1]
Thanks Brian, very cool.

-
From: Mike (MGG942)
23 May 2014   [#8] In reply to [#1]
Excellent!
From: Frenchy Pilou (PILOU)
23 May 2014   [#9]
Translation of the PDF! ;)
http://moiscript.weebly.com/pitch-helix.html
From: bemfarmer
29 May 2017   [#10]
Pitch1 is the initial "instantaneous" pitch at the beginning of the helix.
This can be checked by making the tangent, and doing Angle script, with a line parallel to the x axis.
This is the Lead angle. Take its tangent on a calculator, and multiply by 2 * PI, as explained in the pdf.

Using Length=100 units, constant radius=10 units, first 360 degree turn pitch = 10 units, end 360 degree turn pitch = 30 units,
yields a variable pitch helix with N = 5 turns, Pitch1 = 7.5 units, Pitch2 = 12.5 units.

(The formula result was 7.5 units. The Lead angle was 6.8068 degrees, to 4 decimal places, 2*PI*Tan(6.8068) = 7.499808.)
Angle script could possibly have more units of precision.

The terminal "instantaneous pitch" came out to a lead angle of 27.3495 degrees, for a pitch of 32.4987 units, per my math.

- Brian

The script could have an option added to display P1 and P2
From: bemfarmer
2 Jun 2017   [#11] In reply to [#10]
Let P3 = PTerminal, be the instantaneous pitch at the end of the helix.
This value can be checked by converting the ending tangent angle, as previously described.
By reversing the values of sP and eP in the calculations, it is possible to easily calculate PTerminal, although it could get confusing.
Let sQ = eP, and eQ = sP So that Q1 = P3 (Q1 takes the roll of P1), and Q2 takes the roll of P2.
From the variable pitch equations:

Q2 = (N/(N-1)) * (eQ - sQ)/2 = (N/(N-1)) * (-1) * (eP - sP)) = -P2

Q1 = (L/N) - Q2 = (L/N) + P2
<<QED>>

To summarize the result, with the original sP and eP values, and the original variable pitch helix:

PTerminal = L/N + P2

I think that I will add a checkbox to the _VarPitchHelix script, to display the 4 additional pitches, P1, P2, Pinitial = P1, and Pterminal.

- Brian
From: bemfarmer
3 Jun 2017   [#12] In reply to [#11]
Added pitch3, and an alert message to display the Number of turns, and the 3 other pitches.

// sP = pitch of first (bottom) full turn.
// eP = pitch of last (upper) full turn.

// p1 = initial instantaneous pitch, at bottom of curve.
// p2 = variable portion of pitch.
// p3 = terminal instantaneous pitch at top of curve.

I'm thinking that tangent lead angles would not change for various radii (?).

- Brian

Attachments:
_VarPitchHelixVerbose.zip


From: bemfarmer
4 Jun 2017   [#13]
Here is a late night companion script, _VarPitchHelixExtremes
This script has as inputs the axis length of the desired helix, the instantaneous initial and terminal pitches, and the beginning and ending radii.
Turns is a calculated value.
The math is slightly adjusted from the _VarPitchHelix script.
The math formulas are commented in the script .js file. I should type up my notes on the math.
(The math actually seems to be a bit too easy:-)

There is a verbose checkbox to display the various pitches, and the number of turns.

This script should be perfect to form a transition helix between two helices of the same handedness, same axis, same xy values of start/end,
and a space between them, and different known radii and/or known pitches.

The script has undergone very limited testing, and seems to work well, in alpha status, so use at your own risk.
Entering negative radii or pitches seems harmless, and yields weird or no results, so maybe the parameters should be absolute valued...
There is a crude alert for the two possible cases of division by zero.

(A third script is possible, where Turns is input, and axis Length is calculated.)

- Brian

Attachments:
_VarPitchHelixExtremes.zip


From: bemfarmer
22 Nov 2023   [#14] In reply to [#13]
For a helix with constant radius, the pitch is related to the slope of the constant tangent with respect to the axis:

pitch = PI * 2 * radius * slope

So as the radius of that helix decreases, with constant pitch, the slope increases.

The slope of a helicoid increases closer to the axis.

For a helicoid created from sweep of a variable pitch helix, and intercepted with a surface of revolution that has variable radii,
the SLOPE at some point on the surface helix, could possibly decrease, stay the same or increase, w.r.t. the variable pitch helix. (?)

- Brian
From: geekmidget (HF)
30 Oct   [#15] In reply to [#12]
How could this script be modified to use slope angles instead of pitch units?

The approach I have been trying is making an arch with my desired slope progression curve, then wrapping it around a circle using the deform tool (the helix I want to make is constant radius, variable pitch). However when I show curve points of resulting helix, it isn't as accurate as I would like.