mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-11 17:24:20 +02:00
voronoi preview
This commit is contained in:
@@ -2,7 +2,7 @@ use <trim_shape.scad>;
|
|||||||
use <bezier_curve.scad>;
|
use <bezier_curve.scad>;
|
||||||
use <shape_taiwan.scad>;
|
use <shape_taiwan.scad>;
|
||||||
use <path_scaling_sections.scad>;
|
use <path_scaling_sections.scad>;
|
||||||
use <polysections.scad>;
|
use <sweep.scad>;
|
||||||
use <ptf/ptf_rotate.scad>;
|
use <ptf/ptf_rotate.scad>;
|
||||||
use <bijection_offset.scad>;
|
use <bijection_offset.scad>;
|
||||||
|
|
||||||
@@ -54,8 +54,8 @@ module dancing_formosan(x1, x2, x3, y1, y2, y3, twist, t_step) {
|
|||||||
sections2 = cal_sections(taiwan2, edge_path2, twist);
|
sections2 = cal_sections(taiwan2, edge_path2, twist);
|
||||||
|
|
||||||
difference() {
|
difference() {
|
||||||
polysections(sections);
|
sweep(sections);
|
||||||
polysections(sections2);
|
sweep(sections2);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([0, 0, -2])
|
translate([0, 0, -2])
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
use <hollow_out.scad>;
|
use <hollow_out.scad>;
|
||||||
use <voronoi2d.scad>;
|
use <voronoi/vrn2_from.scad>;
|
||||||
use <bend_extrude.scad>;
|
use <bend_extrude.scad>;
|
||||||
|
|
||||||
r = 35;
|
r = 35;
|
||||||
@@ -30,7 +30,7 @@ module voronoi_bracelet(r, height, thickness, n, frags, offset_r, region_type) {
|
|||||||
{
|
{
|
||||||
difference() {
|
difference() {
|
||||||
square([x, y]);
|
square([x, y]);
|
||||||
voronoi2d(points, spacing = thickness, r = offset_r, region_type = region_type);
|
vrn2_from(points, spacing = thickness, r = offset_r, region_type = region_type);
|
||||||
}
|
}
|
||||||
hollow_out(thickness * 1.5)
|
hollow_out(thickness * 1.5)
|
||||||
square([x, y]);
|
square([x, y]);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
use <golden_spiral.scad>;
|
use <golden_spiral.scad>;
|
||||||
use <ptf/ptf_rotate.scad>;
|
use <ptf/ptf_rotate.scad>;
|
||||||
use <hollow_out.scad>;
|
use <hollow_out.scad>;
|
||||||
use <experimental/voronoi_cells.scad>;
|
use <voronoi/vrn2_cells_from.scad>;
|
||||||
|
|
||||||
spirals = 2; // [2:]
|
spirals = 2; // [2:]
|
||||||
line_thickness = .5;
|
line_thickness = .5;
|
||||||
@@ -33,7 +33,7 @@ module voronoi_fibonacci() {
|
|||||||
half_line_thicness = line_thickness / 2;
|
half_line_thicness = line_thickness / 2;
|
||||||
lst_r = norm(spiral[len(spiral) - 1]) + half_line_thicness;
|
lst_r = norm(spiral[len(spiral) - 1]) + half_line_thicness;
|
||||||
|
|
||||||
cells = voronoi2d_cells(pts);
|
cells = vrn2_cells_from(pts);
|
||||||
for(i = [0:len(pts) - 1]) {
|
for(i = [0:len(pts) - 1]) {
|
||||||
cell = cells[i];
|
cell = cells[i];
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
use <experimental/voronoi_square.scad>;
|
use <voronoi/vrn2_space.scad>;
|
||||||
use <bend_extrude.scad>;
|
use <bend_extrude.scad>;
|
||||||
use <arc.scad>;
|
use <arc.scad>;
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ $fn = 24;
|
|||||||
|
|
||||||
color("black")
|
color("black")
|
||||||
bend_extrude(size, thickness = thickness, angle = 360)
|
bend_extrude(size, thickness = thickness, angle = 360)
|
||||||
voronoi_square(size, grid_w, seed, spacing);
|
vrn2_space(size, grid_w, seed, spacing);
|
||||||
|
|
||||||
r = size[0] / (2 * PI);
|
r = size[0] / (2 * PI);
|
||||||
linear_extrude(size[1])
|
linear_extrude(size[1])
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
use <experimental/voronoi_square_cells.scad>;
|
use <voronoi/vrn2_space_cells.scad>;
|
||||||
use <hull_polyline3d.scad>;
|
use <hull_polyline3d.scad>;
|
||||||
use <ptf/ptf_torus.scad>;
|
use <ptf/ptf_torus.scad>;
|
||||||
|
|
||||||
size = [40, 80];
|
size = [40, 80];
|
||||||
grid_w = 5;
|
grid_w = 5;
|
||||||
cells = voronoi_square_cells(size, grid_w);
|
cells = vrn2_space_cells(size, grid_w);
|
||||||
|
|
||||||
$fn = 4;
|
$fn = 4;
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
use <voronoi3d.scad>;
|
use <voronoi/vrn3_from.scad>;
|
||||||
use <bezier_curve.scad>;
|
use <bezier_curve.scad>;
|
||||||
use <hollow_out.scad>;
|
use <hollow_out.scad>;
|
||||||
use <polysections.scad>;
|
use <sweep.scad>;
|
||||||
|
|
||||||
r = 13;
|
r = 13;
|
||||||
h = 60;
|
h = 60;
|
||||||
@@ -44,13 +44,13 @@ module voronoi_vase(r, h, thickness, num_of_pts, fn, profile_step) {
|
|||||||
|
|
||||||
difference() {
|
difference() {
|
||||||
scale([0.95, 0.95, 1])
|
scale([0.95, 0.95, 1])
|
||||||
polysections(sections);
|
sweep(sections);
|
||||||
scale([0.85, 0.85, 1])
|
scale([0.85, 0.85, 1])
|
||||||
polysections(sections);
|
sweep(sections);
|
||||||
intersection() {
|
intersection() {
|
||||||
polysections(sections);
|
sweep(sections);
|
||||||
render()
|
render()
|
||||||
voronoi3d(concat([for(i = indices) pts[i]], [sections[0][0], sections[0][half_fn], sections[last_section_i][0], sections[last_section_i][half_fn]]));
|
vrn3_from(concat([for(i = indices) pts[i]], [sections[0][0], sections[0][half_fn], sections[last_section_i][0], sections[last_section_i][half_fn]]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
use <intersection_p.scad>;
|
use <lines_intersection.scad>;
|
||||||
|
|
||||||
function _intersection_ps(shape, line_pts, epsilon) =
|
function _intersection_ps(shape, line_pts, epsilon) =
|
||||||
let(
|
let(
|
||||||
@@ -7,6 +7,6 @@ function _intersection_ps(shape, line_pts, epsilon) =
|
|||||||
)
|
)
|
||||||
[
|
[
|
||||||
for(i = [0:leng - 1])
|
for(i = [0:leng - 1])
|
||||||
let(p = intersection_p(line_pts, [pts[i], pts[i + 1]], epsilon = epsilon))
|
let(p = lines_intersection(line_pts, [pts[i], pts[i + 1]], epsilon = epsilon))
|
||||||
if(p != []) p
|
if(p != []) p
|
||||||
];
|
];
|
@@ -1,12 +1,12 @@
|
|||||||
use <hull_polyline2d.scad>;
|
use <hull_polyline2d.scad>;
|
||||||
use <shape_square.scad>;
|
use <shape_square.scad>;
|
||||||
use <experimental/voronoi_cells.scad>;
|
use <voronoi/vrn2_cells_from.scad>;
|
||||||
|
|
||||||
xs1 = rands(-20, 20, 15);
|
xs1 = rands(-20, 20, 15);
|
||||||
ys1 = rands(-20, 20, 15);
|
ys1 = rands(-20, 20, 15);
|
||||||
points = [for(i = [0:len(xs1) - 1]) [xs1[i], ys1[i]]];
|
points = [for(i = [0:len(xs1) - 1]) [xs1[i], ys1[i]]];
|
||||||
|
|
||||||
cells = voronoi_cells(points);
|
cells = vrn2_cells_from(points);
|
||||||
for(i = [0:len(points) - 1]) {
|
for(i = [0:len(points) - 1]) {
|
||||||
pt = points[i];
|
pt = points[i];
|
||||||
cell = cells[i];
|
cell = cells[i];
|
@@ -1,9 +1,9 @@
|
|||||||
use <hull_polyline2d.scad>;
|
use <hull_polyline2d.scad>;
|
||||||
use <experimental/voronoi_square_cells.scad>;
|
use <voronoi/vrn2_space_cells.scad>;
|
||||||
|
|
||||||
size = [20, 20];
|
size = [20, 20];
|
||||||
grid_w = 5;
|
grid_w = 5;
|
||||||
cells = voronoi_square_cells(size, grid_w);
|
cells = vrn2_space_cells(size, grid_w);
|
||||||
|
|
||||||
for(cell = cells) {
|
for(cell = cells) {
|
||||||
cell_pt = cell[0];
|
cell_pt = cell[0];
|
@@ -1,13 +1,16 @@
|
|||||||
to_do:
|
to_do:
|
||||||
|
|
||||||
- deprecate `trianglate`, use `tri_ear_clipping`.
|
- deprecate `trianglate`, use `tri_ear_clipping`.
|
||||||
- deprecate `pixel`
|
|
||||||
|
- deprecate `pixel...`
|
||||||
|
- deprecate `voronoi2d`, `voronoi3d`
|
||||||
|
|
||||||
improved:
|
improved:
|
||||||
|
|
||||||
- polyline2d: improved middle-point drawing, support joinStyle
|
- polyline2d: improved middle-point drawing, support joinStyle
|
||||||
|
|
||||||
2.4 preview:
|
2.4 preview:
|
||||||
|
- voronoi/...
|
||||||
- voxel/....
|
- voxel/....
|
||||||
- lines_intersection2
|
- lines_intersection2
|
||||||
- util/sum
|
- util/sum
|
||||||
|
3
src/voronoi/_impl/_convex_center_p.scad
Normal file
3
src/voronoi/_impl/_convex_center_p.scad
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
use <../../util/sum.scad>;
|
||||||
|
|
||||||
|
function _convex_center_p(points) = sum(points) / len(points);
|
10
src/voronoi/_impl/_convex_ct_clk_order.scad
Normal file
10
src/voronoi/_impl/_convex_ct_clk_order.scad
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
use <../../util/sort.scad>;
|
||||||
|
use <_convex_center_p.scad>;
|
||||||
|
|
||||||
|
function _convex_ct_clk_order(points) =
|
||||||
|
let(
|
||||||
|
cpt = _convex_center_p(points),
|
||||||
|
pts_as = [for(p = points) [p, atan2(p[1] - cpt[1], p[0] - cpt[0])]],
|
||||||
|
sorted = sort(pts_as, by = "idx", idx = 1)
|
||||||
|
)
|
||||||
|
[for(v = sorted) v[0]];
|
29
src/voronoi/_impl/_convex_intersection.scad
Normal file
29
src/voronoi/_impl/_convex_intersection.scad
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
use <../../in_shape.scad>;
|
||||||
|
use <../../lines_intersection.scad>;
|
||||||
|
use <_convex_ct_clk_order.scad>;
|
||||||
|
|
||||||
|
function _intersection_ps(shape, line_pts, epsilon) =
|
||||||
|
let(
|
||||||
|
leng = len(shape),
|
||||||
|
pts = concat(shape, [shape[0]])
|
||||||
|
)
|
||||||
|
[
|
||||||
|
for(i = [0:leng - 1])
|
||||||
|
let(p = lines_intersection(line_pts, [pts[i], pts[i + 1]], epsilon = epsilon))
|
||||||
|
if(p != []) p
|
||||||
|
];
|
||||||
|
|
||||||
|
function _convex_intersection(shape1, shape2, epsilon = 0.0001) =
|
||||||
|
(shape1 == [] || shape2 == []) ? [] :
|
||||||
|
let(
|
||||||
|
leng = len(shape1),
|
||||||
|
pts = concat(shape1, [shape1[0]])
|
||||||
|
)
|
||||||
|
_convex_ct_clk_order(
|
||||||
|
concat(
|
||||||
|
[for(p = shape1) if(in_shape(shape2, p, include_edge = true)) p],
|
||||||
|
[for(p = shape2) if(in_shape(shape1, p, include_edge = true)) p],
|
||||||
|
[for(i = [0:leng - 1]) each _intersection_ps(shape2, [pts[i], pts[i + 1]], epsilon)]
|
||||||
|
)
|
||||||
|
);
|
18
src/voronoi/_impl/_convex_intersection_for.scad
Normal file
18
src/voronoi/_impl/_convex_intersection_for.scad
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
use <_convex_intersection.scad>;
|
||||||
|
|
||||||
|
function _convex_intersection_for_impl(shapes, pre, leng, i = 2) =
|
||||||
|
i == leng ? pre :
|
||||||
|
let(r = _convex_intersection(pre, shapes[i]))
|
||||||
|
r == [] ? []
|
||||||
|
: _convex_intersection_for_impl(shapes,
|
||||||
|
r,
|
||||||
|
leng, i + 1
|
||||||
|
);
|
||||||
|
|
||||||
|
function _convex_intersection_for(shapes) =
|
||||||
|
let(leng = len(shapes))
|
||||||
|
_convex_intersection_for_impl(
|
||||||
|
shapes,
|
||||||
|
_convex_intersection(shapes[0], shapes[1]),
|
||||||
|
leng
|
||||||
|
);
|
@@ -1,4 +1,4 @@
|
|||||||
use <ptf/ptf_rotate.scad>;
|
use <../../ptf/ptf_rotate.scad>;
|
||||||
|
|
||||||
function _default_region_size(points) =
|
function _default_region_size(points) =
|
||||||
let(
|
let(
|
@@ -1,8 +1,8 @@
|
|||||||
use <experimental/_impl/_voronoi2d_cells_impl.scad>;
|
use <_impl/_vrn2_cells_from_impl.scad>;
|
||||||
use <experimental/convex_intersection_for.scad>;
|
use <_impl/_convex_intersection_for.scad>;
|
||||||
use <shape_square.scad>;
|
use <../shape_square.scad>;
|
||||||
|
|
||||||
function voronoi_cells(points) =
|
function vrn2_cells_from(points) =
|
||||||
let(
|
let(
|
||||||
size = _default_region_size(points),
|
size = _default_region_size(points),
|
||||||
half_size = size * 0.5,
|
half_size = size * 0.5,
|
||||||
@@ -14,5 +14,5 @@ function voronoi_cells(points) =
|
|||||||
)
|
)
|
||||||
[
|
[
|
||||||
for(regions = regions_lt)
|
for(regions = regions_lt)
|
||||||
convex_intersection_for(regions)
|
_convex_intersection_for(regions)
|
||||||
];
|
];
|
55
src/voronoi/vrn2_from.scad
Normal file
55
src/voronoi/vrn2_from.scad
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* vrn2_from.scad
|
||||||
|
*
|
||||||
|
* @copyright Justin Lin, 2020
|
||||||
|
* @license https://opensource.org/licenses/lgpl-3.0.html
|
||||||
|
*
|
||||||
|
* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-vrn2_from.html
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
module vrn2_from(points, spacing = 1, r = 0, delta = 0, chamfer = false, region_type = "square") {
|
||||||
|
xs = [for(p = points) p[0]];
|
||||||
|
ys = [for(p = points) abs(p[1])];
|
||||||
|
|
||||||
|
region_size = max([(max(xs) - min(xs) / 2), (max(ys) - min(ys)) / 2]);
|
||||||
|
half_region_size = 0.5 * region_size;
|
||||||
|
offset_leng = spacing * 0.5 + half_region_size;
|
||||||
|
|
||||||
|
function normalize(v) = v / norm(v);
|
||||||
|
|
||||||
|
module region(pt) {
|
||||||
|
intersection_for(p = points) {
|
||||||
|
if(pt != p) {
|
||||||
|
v = p - pt;
|
||||||
|
translate((pt + p) / 2 - normalize(v) * offset_leng)
|
||||||
|
rotate(atan2(v[1], v[0]))
|
||||||
|
children();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module offseted_region(pt) {
|
||||||
|
if(r != 0) {
|
||||||
|
offset(r)
|
||||||
|
region(pt)
|
||||||
|
children();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
offset(delta = delta, chamfer = chamfer)
|
||||||
|
region(pt)
|
||||||
|
children();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(p = points) {
|
||||||
|
if(region_type == "square") {
|
||||||
|
offseted_region(p)
|
||||||
|
square(region_size, center = true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
offseted_region(p)
|
||||||
|
circle(half_region_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
module voronoi_square(size, grid_w, seed, spacing = 1, r = 0, delta = 0, chamfer = false, region_type = "square") {
|
module vrn2_space(size, grid_w, seed, spacing = 1, r = 0, delta = 0, chamfer = false, region_type = "square") {
|
||||||
_noise_table = [0.592157, 0.627451, 0.537255, 0.356863, 0.352941, 0.0588235, 0.513725, 0.0509804, 0.788235, 0.372549, 0.376471, 0.207843, 0.760784, 0.913725, 0.027451, 0.882353, 0.54902, 0.141176, 0.403922, 0.117647, 0.270588, 0.556863, 0.0313725, 0.388235, 0.145098, 0.941176, 0.0823529, 0.0392157, 0.0901961, 0.745098, 0.0235294, 0.580392, 0.968627, 0.470588, 0.917647, 0.294118, 0, 0.101961, 0.772549, 0.243137, 0.368627, 0.988235, 0.858824, 0.796078, 0.458824, 0.137255, 0.0431373, 0.12549, 0.223529, 0.694118, 0.129412, 0.345098, 0.929412, 0.584314, 0.219608, 0.341176, 0.682353, 0.0784314, 0.490196, 0.533333, 0.670588, 0.658824, 0.266667, 0.686275, 0.290196, 0.647059, 0.278431, 0.52549, 0.545098, 0.188235, 0.105882, 0.65098, 0.301961, 0.572549, 0.619608, 0.905882, 0.32549, 0.435294, 0.898039, 0.478431, 0.235294, 0.827451, 0.521569, 0.901961, 0.862745, 0.411765, 0.360784, 0.160784, 0.215686, 0.180392, 0.960784, 0.156863, 0.956863, 0.4, 0.560784, 0.211765, 0.254902, 0.0980392, 0.247059, 0.631373, 0.00392157, 0.847059, 0.313725, 0.286275, 0.819608, 0.298039, 0.517647, 0.733333, 0.815686, 0.34902, 0.0705882, 0.662745, 0.784314, 0.768627, 0.529412, 0.509804, 0.454902, 0.737255, 0.623529, 0.337255, 0.643137, 0.392157, 0.427451, 0.776471, 0.678431, 0.729412, 0.0117647, 0.25098, 0.203922, 0.85098, 0.886275, 0.980392, 0.486275, 0.482353, 0.0196078, 0.792157, 0.14902, 0.576471, 0.462745, 0.494118, 1, 0.321569, 0.333333, 0.831373, 0.811765, 0.807843, 0.231373, 0.890196, 0.184314, 0.0627451, 0.227451, 0.0666667, 0.713725, 0.741176, 0.109804, 0.164706, 0.87451, 0.717647, 0.666667, 0.835294, 0.466667, 0.972549, 0.596078, 0.00784314, 0.172549, 0.603922, 0.639216, 0.27451, 0.866667, 0.6, 0.396078, 0.607843, 0.654902, 0.168627, 0.67451, 0.0352941, 0.505882, 0.0862745, 0.152941, 0.992157, 0.0745098, 0.384314, 0.423529, 0.431373, 0.309804, 0.443137, 0.878431, 0.909804, 0.698039, 0.72549, 0.439216, 0.407843, 0.854902, 0.964706, 0.380392, 0.894118, 0.984314, 0.133333, 0.94902, 0.756863, 0.933333, 0.823529, 0.564706, 0.0470588, 0.74902, 0.701961, 0.635294, 0.945098, 0.317647, 0.2, 0.568627, 0.921569, 0.976471, 0.054902, 0.937255, 0.419608, 0.192157, 0.752941, 0.839216, 0.121569, 0.709804, 0.780392, 0.415686, 0.615686, 0.721569, 0.329412, 0.8, 0.690196, 0.45098, 0.47451, 0.196078, 0.176471, 0.498039, 0.0156863, 0.588235, 0.996078, 0.541176, 0.92549, 0.803922, 0.364706, 0.870588, 0.447059, 0.262745, 0.113725, 0.0941176, 0.282353, 0.952941, 0.552941, 0.501961, 0.764706, 0.305882, 0.258824, 0.843137, 0.239216, 0.611765, 0.705882];
|
_noise_table = [0.592157, 0.627451, 0.537255, 0.356863, 0.352941, 0.0588235, 0.513725, 0.0509804, 0.788235, 0.372549, 0.376471, 0.207843, 0.760784, 0.913725, 0.027451, 0.882353, 0.54902, 0.141176, 0.403922, 0.117647, 0.270588, 0.556863, 0.0313725, 0.388235, 0.145098, 0.941176, 0.0823529, 0.0392157, 0.0901961, 0.745098, 0.0235294, 0.580392, 0.968627, 0.470588, 0.917647, 0.294118, 0, 0.101961, 0.772549, 0.243137, 0.368627, 0.988235, 0.858824, 0.796078, 0.458824, 0.137255, 0.0431373, 0.12549, 0.223529, 0.694118, 0.129412, 0.345098, 0.929412, 0.584314, 0.219608, 0.341176, 0.682353, 0.0784314, 0.490196, 0.533333, 0.670588, 0.658824, 0.266667, 0.686275, 0.290196, 0.647059, 0.278431, 0.52549, 0.545098, 0.188235, 0.105882, 0.65098, 0.301961, 0.572549, 0.619608, 0.905882, 0.32549, 0.435294, 0.898039, 0.478431, 0.235294, 0.827451, 0.521569, 0.901961, 0.862745, 0.411765, 0.360784, 0.160784, 0.215686, 0.180392, 0.960784, 0.156863, 0.956863, 0.4, 0.560784, 0.211765, 0.254902, 0.0980392, 0.247059, 0.631373, 0.00392157, 0.847059, 0.313725, 0.286275, 0.819608, 0.298039, 0.517647, 0.733333, 0.815686, 0.34902, 0.0705882, 0.662745, 0.784314, 0.768627, 0.529412, 0.509804, 0.454902, 0.737255, 0.623529, 0.337255, 0.643137, 0.392157, 0.427451, 0.776471, 0.678431, 0.729412, 0.0117647, 0.25098, 0.203922, 0.85098, 0.886275, 0.980392, 0.486275, 0.482353, 0.0196078, 0.792157, 0.14902, 0.576471, 0.462745, 0.494118, 1, 0.321569, 0.333333, 0.831373, 0.811765, 0.807843, 0.231373, 0.890196, 0.184314, 0.0627451, 0.227451, 0.0666667, 0.713725, 0.741176, 0.109804, 0.164706, 0.87451, 0.717647, 0.666667, 0.835294, 0.466667, 0.972549, 0.596078, 0.00784314, 0.172549, 0.603922, 0.639216, 0.27451, 0.866667, 0.6, 0.396078, 0.607843, 0.654902, 0.168627, 0.67451, 0.0352941, 0.505882, 0.0862745, 0.152941, 0.992157, 0.0745098, 0.384314, 0.423529, 0.431373, 0.309804, 0.443137, 0.878431, 0.909804, 0.698039, 0.72549, 0.439216, 0.407843, 0.854902, 0.964706, 0.380392, 0.894118, 0.984314, 0.133333, 0.94902, 0.756863, 0.933333, 0.823529, 0.564706, 0.0470588, 0.74902, 0.701961, 0.635294, 0.945098, 0.317647, 0.2, 0.568627, 0.921569, 0.976471, 0.054902, 0.937255, 0.419608, 0.192157, 0.752941, 0.839216, 0.121569, 0.709804, 0.780392, 0.415686, 0.615686, 0.721569, 0.329412, 0.8, 0.690196, 0.45098, 0.47451, 0.196078, 0.176471, 0.498039, 0.0156863, 0.588235, 0.996078, 0.541176, 0.92549, 0.803922, 0.364706, 0.870588, 0.447059, 0.262745, 0.113725, 0.0941176, 0.282353, 0.952941, 0.552941, 0.501961, 0.764706, 0.305882, 0.258824, 0.843137, 0.239216, 0.611765, 0.705882];
|
||||||
|
|
||||||
function _lookup_noise_table(i) = _noise_table[i % 256];
|
function _lookup_noise_table(i) = _noise_table[i % 256];
|
@@ -1,8 +1,8 @@
|
|||||||
use <experimental/_impl/_voronoi_square_cells_impl.scad>;
|
use <_impl/_vrn2_space_cells_impl.scad>;
|
||||||
use <experimental/convex_intersection_for.scad>;
|
use <_impl/_convex_intersection_for.scad>;
|
||||||
use <shape_square.scad>;
|
use <../shape_square.scad>;
|
||||||
|
|
||||||
function voronoi_square_cells(size, grid_w, seed) =
|
function vrn2_space_cells(size, grid_w, seed) =
|
||||||
let(
|
let(
|
||||||
sd = is_undef(seed) ? rands(0, 255, 1)[0] : seed,
|
sd = is_undef(seed) ? rands(0, 255, 1)[0] : seed,
|
||||||
region_size = grid_w * 3,
|
region_size = grid_w * 3,
|
||||||
@@ -35,5 +35,5 @@ function voronoi_square_cells(size, grid_w, seed) =
|
|||||||
)
|
)
|
||||||
[
|
[
|
||||||
for(regions = regions_lt)
|
for(regions = regions_lt)
|
||||||
[regions[0], convex_intersection_for(regions[1])]
|
[regions[0], _convex_intersection_for(regions[1])]
|
||||||
];
|
];
|
43
src/voronoi/vrn3_from.scad
Normal file
43
src/voronoi/vrn3_from.scad
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* vrn3_from.scad
|
||||||
|
*
|
||||||
|
* @copyright Justin Lin, 2020
|
||||||
|
* @license https://opensource.org/licenses/lgpl-3.0.html
|
||||||
|
*
|
||||||
|
* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-vrn3_from.html
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
use <__comm__/__angy_angz.scad>;
|
||||||
|
|
||||||
|
// slow but workable
|
||||||
|
|
||||||
|
module vrn3_from(points, spacing = 1) {
|
||||||
|
xs = [for(p = points) p[0]];
|
||||||
|
ys = [for(p = points) abs(p[1])];
|
||||||
|
zs = [for(p = points) abs(p[2])];
|
||||||
|
|
||||||
|
space_size = max([max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)]);
|
||||||
|
half_space_size = 0.5 * space_size;
|
||||||
|
double_space_size = 2 * space_size;
|
||||||
|
offset_leng = (spacing + space_size) * 0.5;
|
||||||
|
|
||||||
|
function normalize(v) = v / norm(v);
|
||||||
|
|
||||||
|
module space(pt) {
|
||||||
|
intersection_for(p = points) {
|
||||||
|
if(pt != p) {
|
||||||
|
v = p - pt;
|
||||||
|
ryz = __angy_angz(p, pt);
|
||||||
|
|
||||||
|
translate((pt + p) / 2 - normalize(v) * offset_leng)
|
||||||
|
rotate([0, -ryz[0], ryz[1]])
|
||||||
|
cube([space_size, double_space_size, double_space_size], center = true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(p = points) {
|
||||||
|
space(p);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
use <__comm__/__angy_angz.scad>;
|
use <__comm__/__angy_angz.scad>;
|
||||||
|
|
||||||
// slow but workable
|
// slow but workable
|
||||||
module voronoi_cube(size, grid_w, seed, spacing = 1) {
|
module vrn3_space(size, grid_w, seed, spacing = 1) {
|
||||||
_noise_table = [0.592157, 0.627451, 0.537255, 0.356863, 0.352941, 0.0588235, 0.513725, 0.0509804, 0.788235, 0.372549, 0.376471, 0.207843, 0.760784, 0.913725, 0.027451, 0.882353, 0.54902, 0.141176, 0.403922, 0.117647, 0.270588, 0.556863, 0.0313725, 0.388235, 0.145098, 0.941176, 0.0823529, 0.0392157, 0.0901961, 0.745098, 0.0235294, 0.580392, 0.968627, 0.470588, 0.917647, 0.294118, 0, 0.101961, 0.772549, 0.243137, 0.368627, 0.988235, 0.858824, 0.796078, 0.458824, 0.137255, 0.0431373, 0.12549, 0.223529, 0.694118, 0.129412, 0.345098, 0.929412, 0.584314, 0.219608, 0.341176, 0.682353, 0.0784314, 0.490196, 0.533333, 0.670588, 0.658824, 0.266667, 0.686275, 0.290196, 0.647059, 0.278431, 0.52549, 0.545098, 0.188235, 0.105882, 0.65098, 0.301961, 0.572549, 0.619608, 0.905882, 0.32549, 0.435294, 0.898039, 0.478431, 0.235294, 0.827451, 0.521569, 0.901961, 0.862745, 0.411765, 0.360784, 0.160784, 0.215686, 0.180392, 0.960784, 0.156863, 0.956863, 0.4, 0.560784, 0.211765, 0.254902, 0.0980392, 0.247059, 0.631373, 0.00392157, 0.847059, 0.313725, 0.286275, 0.819608, 0.298039, 0.517647, 0.733333, 0.815686, 0.34902, 0.0705882, 0.662745, 0.784314, 0.768627, 0.529412, 0.509804, 0.454902, 0.737255, 0.623529, 0.337255, 0.643137, 0.392157, 0.427451, 0.776471, 0.678431, 0.729412, 0.0117647, 0.25098, 0.203922, 0.85098, 0.886275, 0.980392, 0.486275, 0.482353, 0.0196078, 0.792157, 0.14902, 0.576471, 0.462745, 0.494118, 1, 0.321569, 0.333333, 0.831373, 0.811765, 0.807843, 0.231373, 0.890196, 0.184314, 0.0627451, 0.227451, 0.0666667, 0.713725, 0.741176, 0.109804, 0.164706, 0.87451, 0.717647, 0.666667, 0.835294, 0.466667, 0.972549, 0.596078, 0.00784314, 0.172549, 0.603922, 0.639216, 0.27451, 0.866667, 0.6, 0.396078, 0.607843, 0.654902, 0.168627, 0.67451, 0.0352941, 0.505882, 0.0862745, 0.152941, 0.992157, 0.0745098, 0.384314, 0.423529, 0.431373, 0.309804, 0.443137, 0.878431, 0.909804, 0.698039, 0.72549, 0.439216, 0.407843, 0.854902, 0.964706, 0.380392, 0.894118, 0.984314, 0.133333, 0.94902, 0.756863, 0.933333, 0.823529, 0.564706, 0.0470588, 0.74902, 0.701961, 0.635294, 0.945098, 0.317647, 0.2, 0.568627, 0.921569, 0.976471, 0.054902, 0.937255, 0.419608, 0.192157, 0.752941, 0.839216, 0.121569, 0.709804, 0.780392, 0.415686, 0.615686, 0.721569, 0.329412, 0.8, 0.690196, 0.45098, 0.47451, 0.196078, 0.176471, 0.498039, 0.0156863, 0.588235, 0.996078, 0.541176, 0.92549, 0.803922, 0.364706, 0.870588, 0.447059, 0.262745, 0.113725, 0.0941176, 0.282353, 0.952941, 0.552941, 0.501961, 0.764706, 0.305882, 0.258824, 0.843137, 0.239216, 0.611765, 0.705882];
|
_noise_table = [0.592157, 0.627451, 0.537255, 0.356863, 0.352941, 0.0588235, 0.513725, 0.0509804, 0.788235, 0.372549, 0.376471, 0.207843, 0.760784, 0.913725, 0.027451, 0.882353, 0.54902, 0.141176, 0.403922, 0.117647, 0.270588, 0.556863, 0.0313725, 0.388235, 0.145098, 0.941176, 0.0823529, 0.0392157, 0.0901961, 0.745098, 0.0235294, 0.580392, 0.968627, 0.470588, 0.917647, 0.294118, 0, 0.101961, 0.772549, 0.243137, 0.368627, 0.988235, 0.858824, 0.796078, 0.458824, 0.137255, 0.0431373, 0.12549, 0.223529, 0.694118, 0.129412, 0.345098, 0.929412, 0.584314, 0.219608, 0.341176, 0.682353, 0.0784314, 0.490196, 0.533333, 0.670588, 0.658824, 0.266667, 0.686275, 0.290196, 0.647059, 0.278431, 0.52549, 0.545098, 0.188235, 0.105882, 0.65098, 0.301961, 0.572549, 0.619608, 0.905882, 0.32549, 0.435294, 0.898039, 0.478431, 0.235294, 0.827451, 0.521569, 0.901961, 0.862745, 0.411765, 0.360784, 0.160784, 0.215686, 0.180392, 0.960784, 0.156863, 0.956863, 0.4, 0.560784, 0.211765, 0.254902, 0.0980392, 0.247059, 0.631373, 0.00392157, 0.847059, 0.313725, 0.286275, 0.819608, 0.298039, 0.517647, 0.733333, 0.815686, 0.34902, 0.0705882, 0.662745, 0.784314, 0.768627, 0.529412, 0.509804, 0.454902, 0.737255, 0.623529, 0.337255, 0.643137, 0.392157, 0.427451, 0.776471, 0.678431, 0.729412, 0.0117647, 0.25098, 0.203922, 0.85098, 0.886275, 0.980392, 0.486275, 0.482353, 0.0196078, 0.792157, 0.14902, 0.576471, 0.462745, 0.494118, 1, 0.321569, 0.333333, 0.831373, 0.811765, 0.807843, 0.231373, 0.890196, 0.184314, 0.0627451, 0.227451, 0.0666667, 0.713725, 0.741176, 0.109804, 0.164706, 0.87451, 0.717647, 0.666667, 0.835294, 0.466667, 0.972549, 0.596078, 0.00784314, 0.172549, 0.603922, 0.639216, 0.27451, 0.866667, 0.6, 0.396078, 0.607843, 0.654902, 0.168627, 0.67451, 0.0352941, 0.505882, 0.0862745, 0.152941, 0.992157, 0.0745098, 0.384314, 0.423529, 0.431373, 0.309804, 0.443137, 0.878431, 0.909804, 0.698039, 0.72549, 0.439216, 0.407843, 0.854902, 0.964706, 0.380392, 0.894118, 0.984314, 0.133333, 0.94902, 0.756863, 0.933333, 0.823529, 0.564706, 0.0470588, 0.74902, 0.701961, 0.635294, 0.945098, 0.317647, 0.2, 0.568627, 0.921569, 0.976471, 0.054902, 0.937255, 0.419608, 0.192157, 0.752941, 0.839216, 0.121569, 0.709804, 0.780392, 0.415686, 0.615686, 0.721569, 0.329412, 0.8, 0.690196, 0.45098, 0.47451, 0.196078, 0.176471, 0.498039, 0.0156863, 0.588235, 0.996078, 0.541176, 0.92549, 0.803922, 0.364706, 0.870588, 0.447059, 0.262745, 0.113725, 0.0941176, 0.282353, 0.952941, 0.552941, 0.501961, 0.764706, 0.305882, 0.258824, 0.843137, 0.239216, 0.611765, 0.705882];
|
||||||
|
|
||||||
function _lookup_noise_table(i) = _noise_table[i % 256];
|
function _lookup_noise_table(i) = _noise_table[i % 256];
|
Reference in New Issue
Block a user