diff --git a/examples/distorted_vase.scad b/examples/distorted_vase.scad new file mode 100644 index 00000000..c48189d3 --- /dev/null +++ b/examples/distorted_vase.scad @@ -0,0 +1,79 @@ +use ; +use ; +use ; +use ; +use ; +use ; +use ; +use ; + +beginning_radius = 20; +thickness = 2; +fn = 180; +amplitude = 15; +smoothness = 15; +// Perlin noise 2D or 3D +perlin = 2; // [2, 3] +epsilon = 0.000001; + +distorted_vase(beginning_radius, thickness, fn, amplitude, smoothness, perlin, epsilon); + +module distorted_vase(beginning_radius, thickness, fn, amplitude, smoothness, perlin, epsilon) { + seed = rand() * 1000; + section = shape_circle(radius = beginning_radius, $fn = fn); + pt = [beginning_radius, 0, 0]; + + edge_path = bezier_curve(0.02, [ + pt, + pt + [15, 0, 20], + pt + [45, 0, 50], + pt + [20, 0, 70], + pt + [5, 0, 80], + pt + [-5, 0, 100], + pt + [10, 0, 140] + ]); + + + sections = path_scaling_sections(section, edge_path); + + noise = perlin == 2 ? function(pts, seed) nz_perlin2s(pts, seed) : + function(pts, seed) nz_perlin3s(pts, seed); + + noisy = [ + for(section = sections) + let(nz = noise(section / smoothness, seed)) + [ + for(i = [0:len(nz) - 1]) + let( + p = section[i], + p2d = [p[0], p[1]], + noisyP = p2d + p2d / norm(p2d) * nz[i] * amplitude + ) + [noisyP[0], noisyP[1], p[2]] + ] + ]; + + offset_noisy = [ + for(section = noisy) + let( + offset_s = bijection_offset(section, thickness, epsilon) + ) + [ + for(i = [0:len(offset_s) - 1]) + [offset_s[i][0], offset_s[i][1], section[i][2]] + ] + ]; + + all = [ + for(i = [0:len(offset_noisy) - 1]) + concat( + offset_noisy[i], + noisy[i] + ) + ]; + + sweep(all, triangles = "HOLLOW"); + + linear_extrude(thickness) + polygon([for(p = offset_noisy[len(offset_noisy) - 1]) [p[0], p[1]]]); +} \ No newline at end of file