Sweeping mathematical curves in OpenSCAD
Searching around, I didn't see a whole heap of guidance here, but after some thought and experimentation, I found a perfectly workable solution.
OpenSCAD doesn't have a sweep function or operator; however, the hull transformation can be used for this purpose. My first attempt was the "trefoil knot", a relatively simple trigonometric curve represented by the parametric equations:
[math]\displaystyle{ \begin{align} x & = \cos t + 2\cos 2t\\ y & = \sin t - 2\sin 2t\\ z & = -\sin 3t\\ \end{align} }[/math]
The OpenSCAD solution was to break the curve into short steps, and "sweep" a hull between spheres translated to successive points on the curve. The rendering is very clean, and generates a clean stl file read for slicing and 3D-printing.
// Trefoil knot
// stix@stix.id.au 2022-08-30
// 10 for testing, 50 for final - renders in ~8m
$fn=50;
stepsize = 180 / $fn;
function trefoil(t) = [
cos(t) + 2 * cos(2 * t),
sin(t) - 2 * sin(2 * t),
-sin(3 * t)
];
union() {
for(a = [0 : stepsize : 360]) {
hull() {
translate(trefoil(a)) sphere(1);
translate(trefoil(a + stepsize)) sphere(1);
}
}
}