Spiral to Arcs


Is it geometrically possible to create spiral from arcs?

By spiral I mean this simple cylindrical spiral:

 Curve spiral = NurbsCurve.CreateSpiral(x.PointAt(0), x.Direction, x.PointAt(0) + (new Plane(x.PointAt(0), x.Direction)).XAxis * r, pitch, turns, r, r);

I think at best, approximately, because at no point is the spiral planar.You can do it in a succession of small arcs but you’ll always have curvature discontinuities at the joins.

arc spiral.gh (10.2 KB)

Here’s a simple trick I’ve used a few times; it also works with a cone if you want a tapered spiral (which I think should be called a helix.)


Thank you. The thing is that I need spiral arcs for CNC path conaidering cylider milling, I am wondering what would be the best approximation with the smallest amount of arcs?

I guess, the more arcs the better. It probably depends on what you’re looking to optimize, and the accuracy of your machining. I calculated the relative deviation from circularity for one turn, for a set of arcs. Even for 4 arcs, the deviation is about .5%.

arc spiral deviation.gh (18.9 KB)

Back in the late eighties I did conical threads on rock drill rods (starting from 12") on a milling CNC machine using an old Heidenhain TNC-150 control system. I had the CNC to calculate “point-to-point” straight movements using math formulas in a huge loop calculating the next point (ever shrinking radius as the machine rotated around the threads of the drilling bar). The “resolution” of the small steps was parametric as well as the radius of the tool, and so I could control the feed-rate & cutting depth per tooth. I recall using ~0.1 mm straight lines for each step.

In those days there were no arcs in the TNC-150 CNC system (at least not to my knowledge). Anyway, even with the slow CPU’s of 1988 (the machine was several years old at the time) it worked very well.

I used this CNC program for repairing worn out threads on 12" rock drill rods for a copper mine in the Northern Sweden (AITIK). We welded the old threads and then milled them anew. I don’t remember how long the rods were but they were well over 20 feet, I think closer to 30 feet. heavy duty stuff.

// Rolf

Thanks just increasing divisions to 4 arcs per turn gives a very good tolerance.

Nice system, it looks interesting to see windows os on such a monitor:)

I am using arcs because robot is interpreting points quite slowly, so arcs runs faster by doing circular movements.

OK, I thought you were going to use a CNC lathe or milling machine.

// Rolf

Hi Petras, it might not be relevant or necessary to your problem. But just in case you missed it, there’s also the Curve.ToArcsAndLines method:

Thanks Anders.

I was trying to use this method as well.
I really had hard time to understand the correct tolerance values, because the spiral was always converted to the same curve.
//Arcs = spiral.ToArcsAndLines(0.01, 0.01, 0, 0);