1include <../std.scad>
  2
  3
  4// 2D
  5
  6module test_affine2d_identity() {
  7    assert(affine2d_identity() == [[1,0,0],[0,1,0],[0,0,1]]);
  8}
  9test_affine2d_identity();
 10
 11
 12module test_affine2d_translate() {
 13    assert(affine2d_translate([0,0]) == [[1,0,0],[0,1,0],[0,0,1]]);
 14    assert(affine2d_translate([10,20]) == [[1,0,10],[0,1,20],[0,0,1]]);
 15    assert(affine2d_translate([20,10]) == [[1,0,20],[0,1,10],[0,0,1]]);
 16}
 17test_affine2d_translate();
 18
 19
 20module test_affine2d_scale() {
 21    assert(affine2d_scale([1,1]) == [[1,0,0],[0,1,0],[0,0,1]]);
 22    assert(affine2d_scale([2,3]) == [[2,0,0],[0,3,0],[0,0,1]]);
 23    assert(affine2d_scale([5,4]) == [[5,0,0],[0,4,0],[0,0,1]]);
 24}
 25test_affine2d_scale();
 26
 27
 28module test_affine2d_mirror() {
 29    assert(approx(affine2d_mirror([1,1]),[[0,-1,0],[-1,0,0],[0,0,1]]));
 30    assert(affine2d_mirror([1,0]) == [[-1,0,0],[0,1,0],[0,0,1]]);
 31    assert(affine2d_mirror([0,1]) == [[1,0,0],[0,-1,0],[0,0,1]]);
 32}
 33test_affine2d_mirror();
 34
 35
 36module test_affine2d_zrot() {
 37    for(a = [-360:2/3:360]) {
 38        assert(affine2d_zrot(a) == [[cos(a),-sin(a),0],[sin(a),cos(a),0],[0,0,1]]);
 39    }
 40}
 41test_affine2d_zrot();
 42
 43
 44module test_affine2d_skew() {
 45    for(ya = [-89:3:89]) {
 46        for(xa = [-89:3:89]) {
 47            assert(affine2d_skew(xa=xa, ya=ya) == [[1,tan(xa),0],[tan(ya),1,0],[0,0,1]]);
 48        }
 49    }
 50}
 51test_affine2d_skew();
 52
 53
 54// 3D
 55
 56module test_affine3d_identity() {
 57    assert(affine3d_identity() == [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
 58}
 59test_affine3d_identity();
 60
 61
 62module test_affine3d_translate() {
 63    assert(affine3d_translate([10,20,30]) == [[1,0,0,10],[0,1,0,20],[0,0,1,30],[0,0,0,1]]);
 64    assert(affine3d_translate([3,2,1]) == [[1,0,0,3],[0,1,0,2],[0,0,1,1],[0,0,0,1]]);
 65}
 66test_affine3d_translate();
 67
 68
 69module test_affine3d_scale() {
 70    assert(affine3d_scale([3,2,4]) == [[3,0,0,0],[0,2,0,0],[0,0,4,0],[0,0,0,1]]);
 71}
 72test_affine3d_scale();
 73
 74
 75module test_affine3d_mirror() {
 76    assert(affine3d_mirror([1,0,0]) == [[-1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
 77    assert(affine3d_mirror([0,1,0]) == [[1,0,0,0],[0,-1,0,0],[0,0,1,0],[0,0,0,1]]);
 78    assert(affine3d_mirror([0,0,1]) == [[1,0,0,0],[0,1,0,0],[0,0,-1,0],[0,0,0,1]]);
 79    assert(approx(affine3d_mirror([1,1,1]), [[1/3,-2/3,-2/3,0],[-2/3,1/3,-2/3,0],[-2/3,-2/3,1/3,0],[0,0,0,1]]));
 80}
 81test_affine3d_mirror();
 82
 83
 84module test_affine3d_xrot() {
 85    for(a = [-360:2/3:360]) {
 86        assert(approx(affine3d_xrot(a), [[1,0,0,0],[0,cos(a),-sin(a),0],[0,sin(a),cos(a),0],[0,0,0,1]]));
 87    }
 88}
 89test_affine3d_xrot();
 90
 91
 92module test_affine3d_yrot() {
 93    for(a = [-360:2/3:360]) {
 94        assert(approx(affine3d_yrot(a), [[cos(a),0,sin(a),0],[0,1,0,0],[-sin(a),0,cos(a),0],[0,0,0,1]]));
 95    }
 96}
 97test_affine3d_yrot();
 98
 99
100module test_affine3d_zrot() {
101    for(a = [-360:2/3:360]) {
102        assert(approx(affine3d_zrot(a), [[cos(a),-sin(a),0,0],[sin(a),cos(a),0,0],[0,0,1,0],[0,0,0,1]]));
103    }
104}
105test_affine3d_zrot();
106
107
108module test_affine3d_rot_by_axis() {
109    for(a = [-360:2/3:360]) {
110        assert(approx(affine3d_rot_by_axis(RIGHT,a), [[1,0,0,0],[0,cos(a),-sin(a),0],[0,sin(a),cos(a),0],[0,0,0,1]]));
111        assert(approx(affine3d_rot_by_axis(BACK,a), [[cos(a),0,sin(a),0],[0,1,0,0],[-sin(a),0,cos(a),0],[0,0,0,1]]));
112        assert(approx(affine3d_rot_by_axis(UP,a), [[cos(a),-sin(a),0,0],[sin(a),cos(a),0,0],[0,0,1,0],[0,0,0,1]]));
113    }
114}
115test_affine3d_rot_by_axis();
116
117
118module test_affine3d_rot_from_to() {
119    assert(approx(affine3d_rot_from_to(UP,FRONT), affine3d_xrot(90)));
120    assert(approx(affine3d_rot_from_to(UP,RIGHT), affine3d_yrot(90)));
121    assert(approx(affine3d_rot_from_to(BACK,LEFT), affine3d_zrot(90)));
122}
123test_affine3d_rot_from_to();
124
125
126module test_affine3d_skew() {
127    assert(affine3d_skew(sxy=2) == [[1,2,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
128    assert(affine3d_skew(sxz=2) == [[1,0,2,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]);
129    assert(affine3d_skew(syx=2) == [[1,0,0,0],[2,1,0,0],[0,0,1,0],[0,0,0,1]]);
130    assert(affine3d_skew(syz=2) == [[1,0,0,0],[0,1,2,0],[0,0,1,0],[0,0,0,1]]);
131    assert(affine3d_skew(szx=2) == [[1,0,0,0],[0,1,0,0],[2,0,1,0],[0,0,0,1]]);
132    assert(affine3d_skew(szy=2) == [[1,0,0,0],[0,1,0,0],[0,2,1,0],[0,0,0,1]]);
133}
134test_affine3d_skew();
135
136
137module test_affine3d_skew_xy() {
138    for(ya = [-89:3:89]) {
139        for(xa = [-89:3:89]) {
140            assert(affine3d_skew_xy(xa=xa, ya=ya) == [[1,tan(xa),0,0],[tan(ya),1,0,0],[0,0,1,0],[0,0,0,1]]);
141        }
142    }
143}
144test_affine3d_skew_xy();
145
146
147module test_affine3d_skew_xz() {
148    for(za = [-89:3:89]) {
149        for(xa = [-89:3:89]) {
150            assert(affine3d_skew_xz(xa=xa, za=za) == [[1,0,tan(xa),0],[0,1,0,0],[tan(za),0,1,0],[0,0,0,1]]);
151        }
152    }
153}
154test_affine3d_skew_xz();
155
156
157module test_affine3d_skew_yz() {
158    for(za = [-89:3:89]) {
159        for(ya = [-89:3:89]) {
160            assert(affine3d_skew_yz(ya=ya, za=za) == [[1,0,0,0],[0,1,tan(ya),0],[0,tan(za),1,0],[0,0,0,1]]);
161        }
162    }
163}
164test_affine3d_skew_yz();
165
166
167////////////////////////////
168
169
170// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap