mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-13 18:24:28 +02:00
rename
This commit is contained in:
37
src/experimental/_impl/_voronoi2d_lines_impl.scad
Normal file
37
src/experimental/_impl/_voronoi2d_lines_impl.scad
Normal file
@@ -0,0 +1,37 @@
|
||||
function _voronoi2d_lines_tri_vertex(tri, p) =
|
||||
tri[0] == p || tri[1] == p || tri[2] == p;
|
||||
|
||||
function _voronoi2d_lines_tri_same(tri1, tri2) =
|
||||
_voronoi2d_lines_tri_vertex(tri1, tri2[0]) && _voronoi2d_lines_tri_vertex(tri1, tri2[1]) && _voronoi2d_lines_tri_vertex(tri1, tri2[2]);
|
||||
|
||||
function _voronoi2d_lines_tri_coedge(tri1, tri2) =
|
||||
let(
|
||||
n1 = _voronoi2d_lines_tri_vertex(tri2, tri1[0]) ? 1 : 0,
|
||||
n2 = _voronoi2d_lines_tri_vertex(tri2, tri1[1]) ? 1 : 0,
|
||||
n = n1 + n2
|
||||
)
|
||||
(n > 1) || ((n + (_voronoi2d_lines_tri_vertex(tri2, tri1[2]) ? 1 : 0)) > 1);
|
||||
|
||||
function _voronoi2d_lines_tri_neighbors_impl(tris, me, leng, nbrs = [], i = 0) =
|
||||
len(nbrs) == 3 || i == leng ? nbrs :
|
||||
!_voronoi2d_lines_tri_same(me, tris[i]) && _voronoi2d_lines_tri_coedge(me, tris[i]) ? _voronoi2d_lines_tri_neighbors_impl(tris, me, leng, concat(nbrs, [tris[i]]), i + 1) :
|
||||
_voronoi2d_lines_tri_neighbors_impl(tris, me, leng, nbrs, i + 1);
|
||||
|
||||
function _voronoi2d_lines_tri_neighbors(tris, me) =
|
||||
_voronoi2d_lines_tri_neighbors_impl(tris, me, len(tris));
|
||||
|
||||
function _voronoi2d_lines_line_has(line, p) =
|
||||
p == line[0] || p == line[1];
|
||||
|
||||
function _voronoi2d_lines_same_line(line1, line2) =
|
||||
_voronoi2d_lines_line_has(line1, line2[0]) && _voronoi2d_lines_line_has(line1, line2[1]);
|
||||
|
||||
function _voronoi2d_lines_lines_has(lines, line, leng, i = 0) =
|
||||
i == leng ? false :
|
||||
_voronoi2d_lines_same_line(lines[i], line) ? true : _voronoi2d_lines_lines_has(lines, line, leng, i + 1);
|
||||
|
||||
function _voronoi2d_lines_dedup_lines_impl(src, dest, leng, i = 0) =
|
||||
i == leng ? dest :
|
||||
_voronoi2d_lines_lines_has(dest, src[i], len(dest)) ? _voronoi2d_lines_dedup_lines_impl(src, dest, leng, i + 1) : _voronoi2d_lines_dedup_lines_impl(src, concat(dest, [src[i]]), leng, i + 1);
|
||||
|
||||
function _voronoi2d_lines_dedup_lines(lines) = _voronoi2d_lines_dedup_lines_impl(lines, [], len(lines));
|
@@ -1,37 +0,0 @@
|
||||
function _voronoi_lines_tri_vertex(tri, p) =
|
||||
tri[0] == p || tri[1] == p || tri[2] == p;
|
||||
|
||||
function _voronoi_lines_tri_same(tri1, tri2) =
|
||||
_voronoi_lines_tri_vertex(tri1, tri2[0]) && _voronoi_lines_tri_vertex(tri1, tri2[1]) && _voronoi_lines_tri_vertex(tri1, tri2[2]);
|
||||
|
||||
function _voronoi_lines_tri_coedge(tri1, tri2) =
|
||||
let(
|
||||
n1 = _voronoi_lines_tri_vertex(tri2, tri1[0]) ? 1 : 0,
|
||||
n2 = _voronoi_lines_tri_vertex(tri2, tri1[1]) ? 1 : 0,
|
||||
n = n1 + n2
|
||||
)
|
||||
(n > 1) || ((n + (_voronoi_lines_tri_vertex(tri2, tri1[2]) ? 1 : 0)) > 1);
|
||||
|
||||
function _voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs = [], i = 0) =
|
||||
len(nbrs) == 3 || i == leng ? nbrs :
|
||||
!_voronoi_lines_tri_same(me, tris[i]) && _voronoi_lines_tri_coedge(me, tris[i]) ? _voronoi_lines_tri_neighbors_impl(tris, me, leng, concat(nbrs, [tris[i]]), i + 1) :
|
||||
_voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs, i + 1);
|
||||
|
||||
function _voronoi_lines_tri_neighbors(tris, me) =
|
||||
_voronoi_lines_tri_neighbors_impl(tris, me, len(tris));
|
||||
|
||||
function _voronoi_lines_line_has(line, p) =
|
||||
p == line[0] || p == line[1];
|
||||
|
||||
function _voronoi_lines_same_line(line1, line2) =
|
||||
_voronoi_lines_line_has(line1, line2[0]) && _voronoi_lines_line_has(line1, line2[1]);
|
||||
|
||||
function _voronoi_lines_lines_has(lines, line, leng, i = 0) =
|
||||
i == leng ? false :
|
||||
_voronoi_lines_same_line(lines[i], line) ? true : _voronoi_lines_lines_has(lines, line, leng, i + 1);
|
||||
|
||||
function _voronoi_lines_dedup_lines_impl(src, dest, leng, i = 0) =
|
||||
i == leng ? dest :
|
||||
_voronoi_lines_lines_has(dest, src[i], len(dest)) ? _voronoi_lines_dedup_lines_impl(src, dest, leng, i + 1) : _voronoi_lines_dedup_lines_impl(src, concat(dest, [src[i]]), leng, i + 1);
|
||||
|
||||
function _voronoi_lines_dedup_lines(lines) = _voronoi_lines_dedup_lines_impl(lines, [], len(lines));
|
@@ -1,5 +1,5 @@
|
||||
use <hull_polyline2d.scad>;
|
||||
use <experimental/voronoi_lines.scad>;
|
||||
use <experimental/voronoi2d_lines.scad>;
|
||||
use <experimental/convex_hull.scad>;
|
||||
|
||||
pt_nums = 50;
|
||||
@@ -13,7 +13,7 @@ hull_polyline2d(
|
||||
);
|
||||
|
||||
intersection() {
|
||||
for(line = voronoi_lines(points)) {
|
||||
for(line = voronoi2d_lines(points)) {
|
||||
hull_polyline2d(
|
||||
line,
|
||||
width = width,
|
@@ -1,8 +1,8 @@
|
||||
use <experimental/_impl/_voronoi_lines_impl.scad>;
|
||||
use <experimental/_impl/_voronoi2d_lines_impl.scad>;
|
||||
use <experimental/tri_delaunay.scad>;
|
||||
use <experimental/tri_circumcircle.scad>;
|
||||
|
||||
function voronoi_lines(points) =
|
||||
function voronoi2d_lines(points) =
|
||||
let(
|
||||
tris = [
|
||||
for(idxes = tri_delaunay(points))
|
||||
@@ -10,7 +10,7 @@ function voronoi_lines(points) =
|
||||
],
|
||||
lines = [for(me = tris)
|
||||
let(
|
||||
nbrs = _voronoi_lines_tri_neighbors(tris, me),
|
||||
nbrs = _voronoi2d_lines_tri_neighbors(tris, me),
|
||||
circumcircle_cpts = [
|
||||
for(nbr = concat([me], nbrs))
|
||||
tri_circumcircle(nbr)[0]
|
||||
@@ -25,4 +25,4 @@ function voronoi_lines(points) =
|
||||
each lines
|
||||
]
|
||||
)
|
||||
_voronoi_lines_dedup_lines(lines);
|
||||
_voronoi2d_lines_dedup_lines(lines);
|
Reference in New Issue
Block a user