1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-06 14:56:47 +02:00
This commit is contained in:
Justin Lin
2019-06-27 08:53:15 +08:00
parent aa5fc938d0
commit fd684a10cb
4 changed files with 44 additions and 0 deletions

View File

@@ -70,6 +70,7 @@ include <util/split_str.scad>;
include <util/sub_str.scad>;
include <util/reverse.scad>;
include <util/slice.scad>;
include <util/sort.scad>;
include <matrix/m_cumulate.scad>;
include <matrix/m_mirror.scad>;
include <matrix/m_rotation.scad>;

19
src/util/sort.scad Normal file
View File

@@ -0,0 +1,19 @@
function _sort(pts, i) =
let(leng = len(pts))
leng <= 1 ? pts :
let(
pivot = pts[0],
before = [for(j = 1; j < leng; j = j + 1) if(pts[j][i] < pivot[i]) pts[j]],
after = [for(j = 1; j < leng; j = j + 1) if(pts[j][i] >= pivot[i]) pts[j]]
)
concat(_sort(before, i), [pivot], _sort(after, i));
function sort(points, by, idx = -1) =
let(
i = by == "x" ? 0 : (
by == "y" ? 1 : (
by == "z" ? 2 : idx
)
)
)
_sort(points, i);

View File

@@ -68,6 +68,7 @@ include <util/test_sub_str.scad>;
include <util/test_split_str.scad>;
include <util/test_parse_number.scad>;
include <util/test_slice.scad>;
include <util/test_sort.scad>;
// Pixel
include <pixel/test_px_line.scad>;

23
test/util/test_sort.scad Normal file
View File

@@ -0,0 +1,23 @@
module test_sort() {
echo("==== test_sort ====");
include <unittest.scad>;
include <util/sort.scad>;
assertEqualPoints(
[[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]],
sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "x")
);
assertEqualPoints(
[[2, 0, 0], [5, 0, 0], [7, 0, 0], [9, 0, 0], [10, 0, 0]],
sort([[10, 0, 0], [5, 0, 0], [7, 0, 0], [2, 0, 0], [9, 0, 0]], by = "idx", idx = 0)
);
assertEqualPoints(
[[0, 2, 0], [0, 5, 0], [0, 7, 0], [0, 9, 0], [0, 10, 0]],
sort([[0, 10, 0], [0, 5, 0], [0, 7, 0], [0, 2, 0], [0, 9, 0]], by = "y")
);
}
test_sort();