Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 45 additions & 45 deletions tests/test_transforms.scadtest
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ module test_translate() {
assert_equal(translate(val), [[1,0,0,val.x],[0,1,0,val.y],[0,0,1,val.z],[0,0,0,1]]);
assert_equal(translate(val, p=[1,2,3]), [1,2,3]+val);
}
// Traducao 2D: vetor de 2 elementos
// 2D translation: 2-element vector
assert_equal(translate([4,5]), [[1,0,0,4],[0,1,0,5],[0,0,1,0],[0,0,0,1]]);
assert_equal(translate([4,5], p=[1,2,3]), [5,7,3]);
assert_equal(translate([0,0], p=[1,2,3]), [1,2,3]);
// Traducao 2D ponto 2D
// 2D translation with 2D point
assert_equal(translate([3,4], p=[10,20]), [13,24]);
// Traducao com valores negativos grandes
// Translation with large negative values
assert_equal(translate([-100,-200,-300], p=[1,2,3]), [-99,-198,-297]);
// Traducao eixo unico
// Single-axis translation
assert_equal(translate([5,0,0], p=[0,0,0]), [5,0,0]);
assert_equal(translate([0,5,0], p=[0,0,0]), [0,5,0]);
assert_equal(translate([0,0,5], p=[0,0,0]), [0,0,5]);
// Lista de pontos
// List of points
assert_equal(translate([1,2,3], p=[[0,0,0],[10,10,10]]), [[1,2,3],[11,12,13]]);
// Verify that module at least doesn't crash.
translate([-5,-5,-5]) translate([0,0,0]) translate([5,5,5]) union(){};
Expand All @@ -47,17 +47,17 @@ module test_move() {
assert_equal(move("centroid", sq), move(-centroid(sq),sq));
assert_equal(move("mean", vals), move(-mean(vals), vals));
assert_equal(move("box", vals), move(-mean(pointlist_bounds(vals)),vals));
// Movimento 2D: vetor de 2 elementos
// 2D move: 2-element vector
assert_equal(move([4,5]), [[1,0,0,4],[0,1,0,5],[0,0,1,0],[0,0,0,1]]);
assert_equal(move([4,5], p=[1,2,3]), [5,7,3]);
assert_equal(move([0,0], p=[7,8,9]), [7,8,9]);
// Ponto 2D com vetor 2D
// 2D point with 2D vector
assert_equal(move([3,4], p=[10,20]), [13,24]);
// Lista de pontos
// List of points
assert_equal(move([1,1,1], p=[[0,0,0],[5,5,5]]), [[1,1,1],[6,6,6]]);
// Valores negativos grandes
// Large negative values
assert_equal(move([-1000,2000,-3000], p=[1,2,3]), [-999,2002,-2997]);
// Composicao: move(a) * move(b) = move(a+b)
// Composition: move(a) * move(b) = move(a+b)
assert_approx(move([1,2,3]) * move([4,5,6]), move([5,7,9]));
}
test_move();
Expand Down Expand Up @@ -194,22 +194,22 @@ module test_scale() {
assert_equal(scale([2,2], cp=[0.5,0.5], p=square(1)), move([-0.5,-0.5], p=square([2,2])));
assert_equal(scale([2,3,4], p=cb), cube([2,3,4]));
assert_equal(scale([-2,-3,-4], p=cb), [[for (p=cb[0]) v_mul(p,[-2,-3,-4])], [for (f=cb[1]) reverse(f)]]);
// Escala uniforme 1 = identidade
// Uniform scale 1 = identity
assert_equal(scale(1), [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
assert_equal(scale(1, p=[7,8,9]), [7,8,9]);
assert_equal(scale([1,1,1]), [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
assert_equal(scale([1,1,1], p=[7,8,9]), [7,8,9]);
// Escala zero
// Zero scale
assert_equal(scale(0, p=[5,10,15]), [0,0,0]);
assert_equal(scale([0,0,0], p=[5,10,15]), [0,0,0]);
// Escala negativa uniforme
// Uniform negative scale
assert_equal(scale(-1, p=[3,4,5]), [-3,-4,-5]);
// Escala com lista de pontos
// Scale with list of points
assert_equal(scale(2, p=[[1,0,0],[0,1,0]]), [[2,0,0],[0,2,0]]);
assert_equal(scale([2,3,4], p=[[1,1,1],[2,2,2]]), [[2,3,4],[4,6,8]]);
// Escala 2D
// 2D scale
assert_equal(scale([2,3], p=[[1,1],[2,2]]), [[2,3],[4,6]]);
// Composicao: scale(a) * scale(a) = scale(a^2) para uniforme
// Composition: scale(a) * scale(a) = scale(a^2) for uniform scale
assert_approx(scale(3) * scale(3), scale(9));
// Verify that module at least doesn't crash.
scale(-5) scale(5) union(){};
Expand Down Expand Up @@ -294,21 +294,21 @@ module test_mirror() {
// Verify that module at least doesn't crash.
mirror(val) union(){};
}
// Espelho duplo = identidade
// Double mirror = identity
assert_approx(mirror([1,0,0]) * mirror([1,0,0]), affine3d_identity(), "double mirror X = identity");
assert_approx(mirror([0,1,0]) * mirror([0,1,0]), affine3d_identity(), "double mirror Y = identity");
assert_approx(mirror([0,0,1]) * mirror([0,0,1]), affine3d_identity(), "double mirror Z = identity");
// Espelho com vetor diagonal
// Mirror with diagonal vector
assert_approx(mirror([1,1,0]) * mirror([1,1,0]), affine3d_identity(), "double mirror diagonal = identity");
// Espelho com ponto na origem: permanece na origem
// Mirror with point at origin: stays at origin
assert_approx(mirror([1,0,0], p=[0,0,0]), [0,0,0], "mirror origin stays at origin");
// Espelho em eixo X inverte apenas X
// Mirroring on each axis inverts only that axis component
assert_approx(mirror([1,0,0], p=[5,7,9]), [-5,7,9], "mirror X axis");
assert_approx(mirror([0,1,0], p=[5,7,9]), [5,-7,9], "mirror Y axis");
assert_approx(mirror([0,0,1], p=[5,7,9]), [5,7,-9], "mirror Z axis");
// Espelho com lista de pontos
// Mirror with list of points
assert_approx(mirror([1,0,0], p=[[1,2,3],[4,5,6]]), [[-1,2,3],[-4,5,6]], "mirror point list");
// Vetor nao unitario: deve funcionar igual (normalizacao interna)
// Non-unit vector: should work the same (internally normalized)
assert_approx(mirror([2,0,0], p=[5,7,9]), [-5,7,9], "mirror non-unit vector");
assert_approx(mirror([0,10,0], p=[5,7,9]), [5,-7,9], "mirror scaled vector");
}
Expand All @@ -323,17 +323,17 @@ include <../std.scad>
module test_xflip() {
assert_approx(xflip(), [[-1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
assert_approx(xflip(p=[1,2,3]), [-1,2,3]);
// Valor zero permanece zero
// Zero value stays zero
assert_approx(xflip(p=[0,5,10]), [0,5,10]);
// Valores negativos
// Negative values
assert_approx(xflip(p=[-3,2,1]), [3,2,1]);
// Duplo flip = identidade
// Double flip = identity
assert_approx(xflip() * xflip(), affine3d_identity(), "double xflip = identity");
// Flip com offset
// Flip with offset
assert_approx(xflip(x=5, p=[5,2,3]), [5,2,3], "xflip at x=5, point on plane");
assert_approx(xflip(x=5, p=[7,2,3]), [3,2,3], "xflip at x=5, point off plane");
assert_approx(xflip(x=5, p=[0,0,0]), [10,0,0], "xflip at x=5, origin");
// Lista de pontos
// List of points
assert_approx(xflip(p=[[1,2,3],[4,5,6]]), [[-1,2,3],[-4,5,6]]);
// Verify that module at least doesn't crash.
xflip() union(){};
Expand All @@ -349,17 +349,17 @@ include <../std.scad>
module test_yflip() {
assert_approx(yflip(), [[1,0,0,0],[0,-1,0,0],[0,0,1,0],[0,0,0,1]]);
assert_approx(yflip(p=[1,2,3]), [1,-2,3]);
// Valor zero permanece zero
// Zero value stays zero
assert_approx(yflip(p=[5,0,10]), [5,0,10]);
// Valores negativos
// Negative values
assert_approx(yflip(p=[1,-3,2]), [1,3,2]);
// Duplo flip = identidade
// Double flip = identity
assert_approx(yflip() * yflip(), affine3d_identity(), "double yflip = identity");
// Flip com offset
// Flip with offset
assert_approx(yflip(y=5, p=[2,5,3]), [2,5,3], "yflip at y=5, point on plane");
assert_approx(yflip(y=5, p=[2,7,3]), [2,3,3], "yflip at y=5, point off plane");
assert_approx(yflip(y=5, p=[0,0,0]), [0,10,0], "yflip at y=5, origin");
// Lista de pontos
// List of points
assert_approx(yflip(p=[[1,2,3],[4,5,6]]), [[1,-2,3],[4,-5,6]]);
// Verify that module at least doesn't crash.
yflip() union(){};
Expand All @@ -375,17 +375,17 @@ include <../std.scad>
module test_zflip() {
assert_approx(zflip(), [[1,0,0,0],[0,1,0,0],[0,0,-1,0],[0,0,0,1]]);
assert_approx(zflip(p=[1,2,3]), [1,2,-3]);
// Valor zero permanece zero
// Zero value stays zero
assert_approx(zflip(p=[5,10,0]), [5,10,0]);
// Valores negativos
// Negative values
assert_approx(zflip(p=[1,2,-3]), [1,2,3]);
// Duplo flip = identidade
// Double flip = identity
assert_approx(zflip() * zflip(), affine3d_identity(), "double zflip = identity");
// Flip com offset
// Flip with offset
assert_approx(zflip(z=5, p=[2,3,5]), [2,3,5], "zflip at z=5, point on plane");
assert_approx(zflip(z=5, p=[2,3,7]), [2,3,3], "zflip at z=5, point off plane");
assert_approx(zflip(z=5, p=[0,0,0]), [0,0,10], "zflip at z=5, origin");
// Lista de pontos
// List of points
assert_approx(zflip(p=[[1,2,3],[4,5,6]]), [[1,2,-3],[4,5,-6]]);
// Verify that module at least doesn't crash.
zflip() union(){};
Expand Down Expand Up @@ -579,9 +579,9 @@ include <../std.scad>
module test_frame_map() {
assert(approx(frame_map(x=[1,1,0], y=[-1,1,0]), affine3d_zrot(45)));
assert(approx(frame_map(x=[0,1,0], y=[0,0,1]), rot(v=[1,1,1],a=120)));
// Identidade: eixos padrao
// Identity: default axes
assert_approx(frame_map(x=[1,0,0], y=[0,1,0]), affine3d_identity(), "frame_map identity");
// Trocar X e Y equivale a rotacao de 90 em Z com flip
// Swapping X and Y axes is equivalent to a 90-degree rotation about Z
assert_approx(frame_map(x=[0,1,0], y=[-1,0,0]), affine3d_zrot(90), "frame_map 90 deg Z");
}
test_frame_map();
Expand All @@ -596,24 +596,24 @@ module test_skew() {
m = affine3d_skew(sxy=2, sxz=3, syx=4, syz=5, szx=6, szy=7);
assert_approx(skew(sxy=2, sxz=3, syx=4, syz=5, szx=6, szy=7), m);
assert_approx(skew(sxy=2, sxz=3, syx=4, syz=5, szx=6, szy=7, p=[1,2,3]), apply(m,[1,2,3]));
// Skew zero = identidade
// Zero skew = identity
assert_approx(skew(), affine3d_identity(), "skew with no args = identity");
assert_approx(skew(sxy=0, sxz=0, syx=0, syz=0, szx=0, szy=0), affine3d_identity(), "skew all zeros = identity");
// Skew zero aplicado a ponto nao altera
// Zero skew applied to a point leaves it unchanged
assert_approx(skew(p=[5,10,15]), [5,10,15], "skew zero on point = identity");
// Skew de eixo individual
// Single-axis skew
assert_approx(skew(sxy=1, p=[1,2,3]), apply(affine3d_skew(sxy=1), [1,2,3]), "skew sxy only");
assert_approx(skew(sxz=1, p=[1,2,3]), apply(affine3d_skew(sxz=1), [1,2,3]), "skew sxz only");
assert_approx(skew(syx=1, p=[1,2,3]), apply(affine3d_skew(syx=1), [1,2,3]), "skew syx only");
assert_approx(skew(syz=1, p=[1,2,3]), apply(affine3d_skew(syz=1), [1,2,3]), "skew syz only");
assert_approx(skew(szx=1, p=[1,2,3]), apply(affine3d_skew(szx=1), [1,2,3]), "skew szx only");
assert_approx(skew(szy=1, p=[1,2,3]), apply(affine3d_skew(szy=1), [1,2,3]), "skew szy only");
// Skew com valores negativos
// Skew with negative values
assert_approx(skew(sxy=-3, p=[1,2,3]), apply(affine3d_skew(sxy=-3), [1,2,3]), "skew negative sxy");
// Skew via angulo
// Skew via angle
assert_approx(skew(axy=45, p=[1,2,3]), skew(sxy=tan(45), p=[1,2,3]), "skew axy=45 == sxy=tan(45)");
assert_approx(skew(ayx=30, p=[1,2,3]), skew(syx=tan(30), p=[1,2,3]), "skew ayx=30 == syx=tan(30)");
// Lista de pontos
// List of points
m2 = affine3d_skew(sxy=2);
assert_approx(skew(sxy=2, p=[[1,0,0],[0,1,0],[0,0,1]]), apply(m2, [[1,0,0],[0,1,0],[0,0,1]]), "skew point list");
// Verify that module at least doesn't crash.
Expand Down
Loading
Loading