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