snow-math 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/snow-math/mat3.c +66 -30
- data/ext/snow-math/mat4.c +46 -46
- data/ext/snow-math/maths_local.h +5 -3
- data/ext/snow-math/quat.c +29 -29
- data/ext/snow-math/vec3.c +8 -8
- data/ext/snow-math/vec4.c +10 -10
- metadata +2 -5
- data/lib/snow-math/line.rb +0 -0
- data/lib/snow-math/plane.rb +0 -0
- data/lib/snow-math/vec2.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2abd452bb35eb8e3103d3f7be86ff10caafa41cf
|
4
|
+
data.tar.gz: 7bdde81b230eed327872fd2207b720880657b8ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d03e5ff63f45425ebcdf9078505b760ab847d663c580aecd031769c3cfbb79737957df79f52befbf173f80edb9dbefb134067ac4a4910a3c7dd0b26d0d8b7a7
|
7
|
+
data.tar.gz: 4b564b77f26858fb0db2bdd25db32eee51ff20c1237dfefdba7ca8be48805ee2bf2ce62b8c57a3746ce8e9ab6ec0adb9dd11fb9fb347efbc4b518ff3561181cc
|
data/ext/snow-math/mat3.c
CHANGED
@@ -17,9 +17,9 @@ extern "C"
|
|
17
17
|
|
18
18
|
|
19
19
|
const mat3_t g_mat3_identity = {
|
20
|
-
1.0, 0.0, 0.0,
|
21
|
-
0.0, 1.0, 0.0,
|
22
|
-
0.0, 0.0, 1.0
|
20
|
+
s_float_lit(1.0), s_float_lit(0.0), s_float_lit(0.0),
|
21
|
+
s_float_lit(0.0), s_float_lit(1.0), s_float_lit(0.0),
|
22
|
+
s_float_lit(0.0), s_float_lit(0.0), s_float_lit(1.0)
|
23
23
|
};
|
24
24
|
|
25
25
|
|
@@ -57,14 +57,14 @@ void mat3_identity(mat3_t out)
|
|
57
57
|
{
|
58
58
|
out[0] =
|
59
59
|
out[4] =
|
60
|
-
out[8] = 1;
|
60
|
+
out[8] = s_float_lit(1.0);
|
61
61
|
|
62
62
|
out[1] =
|
63
63
|
out[2] =
|
64
64
|
out[3] =
|
65
65
|
out[5] =
|
66
66
|
out[6] =
|
67
|
-
out[7] = 0;
|
67
|
+
out[7] = s_float_lit(0.0);
|
68
68
|
}
|
69
69
|
|
70
70
|
|
@@ -74,19 +74,19 @@ void mat3_to_mat4(const mat3_t in, mat4_t out)
|
|
74
74
|
out[0] = in[0];
|
75
75
|
out[1] = in[1];
|
76
76
|
out[2] = in[2];
|
77
|
-
out[3] = 0;
|
77
|
+
out[3] = s_float_lit(0.0);
|
78
78
|
out[4] = in[3];
|
79
79
|
out[5] = in[4];
|
80
80
|
out[6] = in[5];
|
81
|
-
out[7] = 0;
|
81
|
+
out[7] = s_float_lit(0.0);
|
82
82
|
out[8] = in[6];
|
83
83
|
out[9] = in[7];
|
84
84
|
out[10] = in[8];
|
85
85
|
out[14] =
|
86
86
|
out[13] =
|
87
87
|
out[12] =
|
88
|
-
out[11] = 0;
|
89
|
-
out[15] = 1;
|
88
|
+
out[11] = s_float_lit(0.0);
|
89
|
+
out[15] = s_float_lit(1.0);
|
90
90
|
}
|
91
91
|
|
92
92
|
|
@@ -114,7 +114,7 @@ void mat3_rotation(s_float_t angle, s_float_t x, s_float_t y, s_float_t z, mat3_
|
|
114
114
|
const s_float_t angle_rad = angle * S_DEG2RAD;
|
115
115
|
const s_float_t c = s_cos(angle_rad);
|
116
116
|
const s_float_t s = s_sin(angle_rad);
|
117
|
-
const s_float_t ic = 1.0 - c;
|
117
|
+
const s_float_t ic = s_float_lit(1.0) - c;
|
118
118
|
const s_float_t xy = x * y * ic;
|
119
119
|
const s_float_t yz = y * z * ic;
|
120
120
|
const s_float_t xz = x * z * ic;
|
@@ -139,9 +139,9 @@ void mat3_from_quat(const quat_t in, mat3_t out)
|
|
139
139
|
{
|
140
140
|
s_float_t tx, ty, tz, xx, xy, xz, yy, yz, zz, wx, wy, wz;
|
141
141
|
|
142
|
-
tx = 2.0 * in[0];
|
143
|
-
ty = 2.0 * in[1];
|
144
|
-
tz = 2.0 * in[2];
|
142
|
+
tx = s_float_lit(2.0) * in[0];
|
143
|
+
ty = s_float_lit(2.0) * in[1];
|
144
|
+
tz = s_float_lit(2.0) * in[2];
|
145
145
|
|
146
146
|
xx = tx * in[0];
|
147
147
|
xy = tx * in[1];
|
@@ -156,15 +156,15 @@ void mat3_from_quat(const quat_t in, mat3_t out)
|
|
156
156
|
wy = ty * in[3];
|
157
157
|
wz = tz * in[3];
|
158
158
|
|
159
|
-
out[0] = 1.0 - (yy + zz);
|
159
|
+
out[0] = s_float_lit(1.0) - (yy + zz);
|
160
160
|
out[1] = xy - wz;
|
161
161
|
out[2] = xz + wy;
|
162
162
|
out[3] = xy + wz;
|
163
|
-
out[4] = 1.0 - (xx + zz);
|
163
|
+
out[4] = s_float_lit(1.0) - (xx + zz);
|
164
164
|
out[5] = yz - wx;
|
165
165
|
out[6] = xz - wy;
|
166
166
|
out[7] = yz + wx;
|
167
|
-
out[8] = 1.0 - (xx + yy);
|
167
|
+
out[8] = s_float_lit(1.0) - (xx + yy);
|
168
168
|
}
|
169
169
|
|
170
170
|
|
@@ -353,8 +353,8 @@ void mat3_adjoint(const mat3_t in, mat3_t out)
|
|
353
353
|
int mat3_inverse(const mat3_t in, mat3_t out)
|
354
354
|
{
|
355
355
|
s_float_t determinant = mat3_determinant(in);
|
356
|
-
if (determinant != 0.0 && determinant != -0.0) {
|
357
|
-
determinant = 1.0 / determinant;
|
356
|
+
if (determinant != s_float_lit(0.0) && determinant != s_float_lit(-0.0)) {
|
357
|
+
determinant = s_float_lit(1.0) / determinant;
|
358
358
|
} else {
|
359
359
|
return 0;
|
360
360
|
}
|
@@ -378,16 +378,25 @@ int mat3_inverse(const mat3_t in, mat3_t out)
|
|
378
378
|
|
379
379
|
void mat3_get_row3(const mat3_t in, int row, vec3_t out)
|
380
380
|
{
|
381
|
-
const s_float_t *p = &in[0];
|
382
381
|
switch (row) {
|
383
|
-
case 2: { p += 3; }
|
384
|
-
case 1: { p += 3; }
|
385
382
|
case 0: {
|
386
383
|
out[0] = in[0];
|
387
384
|
out[1] = in[1];
|
388
385
|
out[2] = in[2];
|
389
386
|
break;
|
390
387
|
}
|
388
|
+
case 1: {
|
389
|
+
out[0] = in[3];
|
390
|
+
out[1] = in[4];
|
391
|
+
out[2] = in[5];
|
392
|
+
break;
|
393
|
+
}
|
394
|
+
case 2: {
|
395
|
+
out[0] = in[6];
|
396
|
+
out[1] = in[7];
|
397
|
+
out[2] = in[8];
|
398
|
+
break;
|
399
|
+
}
|
391
400
|
default: { break; }
|
392
401
|
}
|
393
402
|
}
|
@@ -396,16 +405,25 @@ void mat3_get_row3(const mat3_t in, int row, vec3_t out)
|
|
396
405
|
|
397
406
|
void mat3_get_column3(const mat3_t in, int column, vec3_t out)
|
398
407
|
{
|
399
|
-
const s_float_t *p = &in[0];
|
400
408
|
switch (column) {
|
401
|
-
case 2: { ++p; }
|
402
|
-
case 1: { ++p; }
|
403
409
|
case 0: {
|
404
410
|
out[0] = in[0];
|
405
411
|
out[1] = in[3];
|
406
412
|
out[2] = in[6];
|
407
413
|
break;
|
408
414
|
}
|
415
|
+
case 1: {
|
416
|
+
out[0] = in[1];
|
417
|
+
out[1] = in[4];
|
418
|
+
out[2] = in[7];
|
419
|
+
break;
|
420
|
+
}
|
421
|
+
case 2: {
|
422
|
+
out[0] = in[2];
|
423
|
+
out[1] = in[5];
|
424
|
+
out[2] = in[8];
|
425
|
+
break;
|
426
|
+
}
|
409
427
|
default: { break; }
|
410
428
|
}
|
411
429
|
}
|
@@ -414,16 +432,25 @@ void mat3_get_column3(const mat3_t in, int column, vec3_t out)
|
|
414
432
|
|
415
433
|
void mat3_set_row3(int row, const vec3_t in, mat3_t out)
|
416
434
|
{
|
417
|
-
const s_float_t *p = &out[0];
|
418
435
|
switch (row) {
|
419
|
-
case 2: { p += 3; }
|
420
|
-
case 1: { p += 3; }
|
421
436
|
case 0: {
|
422
437
|
out[0] = in[0];
|
423
438
|
out[1] = in[1];
|
424
439
|
out[2] = in[2];
|
425
440
|
break;
|
426
441
|
}
|
442
|
+
case 1: {
|
443
|
+
out[3] = in[0];
|
444
|
+
out[4] = in[1];
|
445
|
+
out[5] = in[2];
|
446
|
+
break;
|
447
|
+
}
|
448
|
+
case 2: {
|
449
|
+
out[6] = in[0];
|
450
|
+
out[7] = in[1];
|
451
|
+
out[8] = in[2];
|
452
|
+
break;
|
453
|
+
}
|
427
454
|
default: { break; }
|
428
455
|
}
|
429
456
|
}
|
@@ -432,16 +459,25 @@ void mat3_set_row3(int row, const vec3_t in, mat3_t out)
|
|
432
459
|
|
433
460
|
void mat3_set_column3(int column, const vec3_t in, mat3_t out)
|
434
461
|
{
|
435
|
-
const s_float_t *p = &out[0];
|
436
462
|
switch (column) {
|
437
|
-
case 2: { ++p; }
|
438
|
-
case 1: { ++p; }
|
439
463
|
case 0: {
|
440
464
|
out[0] = in[0];
|
441
465
|
out[3] = in[1];
|
442
466
|
out[6] = in[2];
|
443
467
|
break;
|
444
468
|
}
|
469
|
+
case 1: {
|
470
|
+
out[3] = in[0];
|
471
|
+
out[4] = in[1];
|
472
|
+
out[5] = in[2];
|
473
|
+
break;
|
474
|
+
}
|
475
|
+
case 2: {
|
476
|
+
out[6] = in[0];
|
477
|
+
out[7] = in[1];
|
478
|
+
out[8] = in[2];
|
479
|
+
break;
|
480
|
+
}
|
445
481
|
default: { break; }
|
446
482
|
}
|
447
483
|
}
|
data/ext/snow-math/mat4.c
CHANGED
@@ -23,21 +23,21 @@ extern "C"
|
|
23
23
|
*/
|
24
24
|
|
25
25
|
const mat4_t g_mat4_identity = {
|
26
|
-
1.0, 0.0, 0.0, 0.0,
|
27
|
-
0.0, 1.0, 0.0, 0.0,
|
28
|
-
0.0, 0.0, 1.0, 0.0,
|
29
|
-
0.0, 0.0, 0.0, 1.0
|
26
|
+
s_float_lit(1.0), s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0),
|
27
|
+
s_float_lit(0.0), s_float_lit(1.0), s_float_lit(0.0), s_float_lit(0.0),
|
28
|
+
s_float_lit(0.0), s_float_lit(0.0), s_float_lit(1.0), s_float_lit(0.0),
|
29
|
+
s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0), s_float_lit(1.0)
|
30
30
|
};
|
31
31
|
|
32
32
|
static s_float_t mat4_cofactor(const mat4_t m, int r0, int r1, int r2, int c0, int c1, int c2);
|
33
33
|
|
34
34
|
void mat4_identity(mat4_t out)
|
35
35
|
{
|
36
|
-
out[0] = out[5] = out[10] = out[15] = 1.0;
|
36
|
+
out[0] = out[5] = out[10] = out[15] = s_float_lit(1.0);
|
37
37
|
out[1] = out[2] = out[3] =
|
38
38
|
out[4] = out[6] = out[7] =
|
39
39
|
out[8] = out[9] = out[11] =
|
40
|
-
out[12] = out[13] = out[14] = 0.0;
|
40
|
+
out[12] = out[13] = out[14] = s_float_lit(0.0);
|
41
41
|
}
|
42
42
|
|
43
43
|
void mat4_copy(const mat4_t in, mat4_t out)
|
@@ -116,8 +116,8 @@ void mat4_set_axes3(const vec3_t x, const vec3_t y, const vec3_t z, const vec3_t
|
|
116
116
|
out[7] = w[1];
|
117
117
|
out[11] = w[2];
|
118
118
|
|
119
|
-
out[12] = out[13] = out[14] = 0.0;
|
120
|
-
out[15] = 1.0;
|
119
|
+
out[12] = out[13] = out[14] = s_float_lit(0.0);
|
120
|
+
out[15] = s_float_lit(1.0);
|
121
121
|
}
|
122
122
|
|
123
123
|
void mat4_get_axes3(const mat4_t m, vec3_t x, vec3_t y, vec3_t z, vec3_t w)
|
@@ -208,7 +208,7 @@ void mat4_rotation(s_float_t angle, s_float_t x, s_float_t y, s_float_t z, mat4_
|
|
208
208
|
const s_float_t angle_rad = angle * S_DEG2RAD;
|
209
209
|
const s_float_t c = s_cos(angle_rad);
|
210
210
|
const s_float_t s = s_sin(angle_rad);
|
211
|
-
const s_float_t ic = 1.0 - c;
|
211
|
+
const s_float_t ic = s_float_lit(1.0) - c;
|
212
212
|
const s_float_t xy = x * y * ic;
|
213
213
|
const s_float_t yz = y * z * ic;
|
214
214
|
const s_float_t xz = x * z * ic;
|
@@ -226,8 +226,8 @@ void mat4_rotation(s_float_t angle, s_float_t x, s_float_t y, s_float_t z, mat4_
|
|
226
226
|
out[9] = yz - xs;
|
227
227
|
out[10] = ((z * z) * ic) + c;
|
228
228
|
out[3] = out[7] = out[11] =
|
229
|
-
out[12] = out[13] = out[14] = 0.0;
|
230
|
-
out[15] = 1.0;
|
229
|
+
out[12] = out[13] = out[14] = s_float_lit(0.0);
|
230
|
+
out[15] = s_float_lit(1.0);
|
231
231
|
}
|
232
232
|
|
233
233
|
void mat4_frustum(s_float_t left, s_float_t right, s_float_t bottom, s_float_t top, s_float_t near, s_float_t far, mat4_t out)
|
@@ -235,18 +235,18 @@ void mat4_frustum(s_float_t left, s_float_t right, s_float_t bottom, s_float_t t
|
|
235
235
|
const s_float_t xdelta = right - left;
|
236
236
|
const s_float_t ydelta = top - bottom;
|
237
237
|
const s_float_t zdelta = far - near;
|
238
|
-
const s_float_t neardouble = 2.0 * near;
|
238
|
+
const s_float_t neardouble = s_float_lit(2.0) * near;
|
239
239
|
|
240
240
|
out[0] = neardouble / xdelta;
|
241
241
|
out[2] = (right + left) / xdelta;
|
242
242
|
out[5] = neardouble / ydelta;
|
243
243
|
out[6] = (top + bottom) / ydelta;
|
244
244
|
out[10] = -((far + near) / zdelta);
|
245
|
-
out[11] = -1.0;
|
245
|
+
out[11] = s_float_lit(-1.0);
|
246
246
|
out[14] = -((neardouble * far) / zdelta);
|
247
247
|
out[1] = out[3] = out[4] =
|
248
248
|
out[7] = out[8] = out[9] =
|
249
|
-
out[12] = out[13] = out[15] = 0.0;
|
249
|
+
out[12] = out[13] = out[15] = s_float_lit(0.0);
|
250
250
|
}
|
251
251
|
|
252
252
|
void mat4_orthographic(s_float_t left, s_float_t right, s_float_t bottom, s_float_t top, s_float_t near, s_float_t far, mat4_t out)
|
@@ -255,37 +255,37 @@ void mat4_orthographic(s_float_t left, s_float_t right, s_float_t bottom, s_floa
|
|
255
255
|
const s_float_t ydelta = top - bottom;
|
256
256
|
const s_float_t zdelta = far - near;
|
257
257
|
|
258
|
-
out[0] = 2.0 / xdelta;
|
259
|
-
out[5] = 2.0 / ydelta;
|
260
|
-
out[10] = -2.0 / zdelta;
|
258
|
+
out[0] = s_float_lit(2.0) / xdelta;
|
259
|
+
out[5] = s_float_lit(2.0) / ydelta;
|
260
|
+
out[10] = s_float_lit(-2.0) / zdelta;
|
261
261
|
out[12] = -((right + left) / xdelta);
|
262
262
|
out[13] = -((top + bottom) / ydelta);
|
263
263
|
out[14] = -((far + near) / zdelta);
|
264
|
-
out[15] = 1.0;
|
264
|
+
out[15] = s_float_lit(1.0);
|
265
265
|
out[1] = out[2] = out[3] =
|
266
266
|
out[4] = out[6] = out[7] =
|
267
|
-
out[8] = out[9] = out[11] = 0.0;
|
267
|
+
out[8] = out[9] = out[11] = s_float_lit(0.0);
|
268
268
|
}
|
269
269
|
|
270
270
|
void mat4_perspective(s_float_t fov_y, s_float_t aspect, s_float_t near, s_float_t far, mat4_t out)
|
271
271
|
{
|
272
|
-
const s_float_t r = s_tan(fov_y * 0.5 * S_DEG2RAD);
|
272
|
+
const s_float_t r = s_tan(fov_y * s_float_lit(0.5) * S_DEG2RAD);
|
273
273
|
const s_float_t left = -r * aspect;
|
274
274
|
const s_float_t right = r * aspect;
|
275
275
|
const s_float_t bottom = -r;
|
276
276
|
const s_float_t top = r;
|
277
|
-
const s_float_t two_near = 2 * near;
|
278
|
-
const s_float_t zdelta = 1.0 / (near - far);
|
277
|
+
const s_float_t two_near = s_float_lit(2.0) * near;
|
278
|
+
const s_float_t zdelta = s_float_lit(1.0) / (near - far);
|
279
279
|
|
280
280
|
out[0] = two_near * (right - left);
|
281
281
|
out[5] = two_near / (top - bottom);
|
282
282
|
out[10] = (far + near) * zdelta;
|
283
|
-
out[11] = -1.0;
|
283
|
+
out[11] = s_float_lit(-1.0);
|
284
284
|
out[14] = (two_near * far) * zdelta;
|
285
285
|
out[1] = out[2] = out[3] =
|
286
286
|
out[4] = out[6] = out[7] =
|
287
287
|
out[8] = out[9] = out[12] =
|
288
|
-
out[13] = out[15] = 0.0;
|
288
|
+
out[13] = out[15] = s_float_lit(0.0);
|
289
289
|
}
|
290
290
|
|
291
291
|
void mat4_look_at(const vec3_t eye, const vec3_t center, const vec3_t up, mat4_t out)
|
@@ -315,9 +315,9 @@ void mat4_from_quat(const quat_t quat, mat4_t out)
|
|
315
315
|
{
|
316
316
|
s_float_t tx, ty, tz, xx, xy, xz, yy, yz, zz, wx, wy, wz;
|
317
317
|
|
318
|
-
tx = 2.0 * quat[0];
|
319
|
-
ty = 2.0 * quat[1];
|
320
|
-
tz = 2.0 * quat[2];
|
318
|
+
tx = s_float_lit(2.0) * quat[0];
|
319
|
+
ty = s_float_lit(2.0) * quat[1];
|
320
|
+
tz = s_float_lit(2.0) * quat[2];
|
321
321
|
|
322
322
|
xx = tx * quat[0];
|
323
323
|
xy = tx * quat[1];
|
@@ -332,24 +332,24 @@ void mat4_from_quat(const quat_t quat, mat4_t out)
|
|
332
332
|
wy = ty * quat[3];
|
333
333
|
wz = tz * quat[3];
|
334
334
|
|
335
|
-
out[0 ] = 1.0 - (yy + zz);
|
335
|
+
out[0 ] = s_float_lit(1.0) - (yy + zz);
|
336
336
|
out[1 ] = xy - wz;
|
337
337
|
out[2 ] = xz + wy;
|
338
338
|
out[4 ] = xy + wz;
|
339
|
-
out[5 ] = 1.0 - (xx + zz);
|
339
|
+
out[5 ] = s_float_lit(1.0) - (xx + zz);
|
340
340
|
out[6 ] = yz - wx;
|
341
341
|
out[8 ] = xz - wy;
|
342
342
|
out[9 ] = yz + wx;
|
343
|
-
out[10] = 1.0 - (xx + yy);
|
343
|
+
out[10] = s_float_lit(1.0) - (xx + yy);
|
344
344
|
|
345
|
-
out[7 ] = 0.0;
|
346
|
-
out[3 ] = 0.0;
|
347
|
-
out[11] = 0.0;
|
348
|
-
out[12] = 0.0;
|
349
|
-
out[13] = 0.0;
|
350
|
-
out[14] = 0.0;
|
345
|
+
out[7 ] = s_float_lit(0.0);
|
346
|
+
out[3 ] = s_float_lit(0.0);
|
347
|
+
out[11] = s_float_lit(0.0);
|
348
|
+
out[12] = s_float_lit(0.0);
|
349
|
+
out[13] = s_float_lit(0.0);
|
350
|
+
out[14] = s_float_lit(0.0);
|
351
351
|
|
352
|
-
out[15] = 1.0;
|
352
|
+
out[15] = s_float_lit(1.0);
|
353
353
|
}
|
354
354
|
|
355
355
|
void mat4_get_row4(const mat4_t in, int row, vec4_t out)
|
@@ -491,21 +491,21 @@ void mat4_inverse_orthogonal(const mat4_t in, mat4_t out)
|
|
491
491
|
in[0],
|
492
492
|
in[4],
|
493
493
|
in[8],
|
494
|
-
0.0,
|
494
|
+
s_float_lit(0.0),
|
495
495
|
in[1],
|
496
496
|
in[5],
|
497
497
|
in[9],
|
498
|
-
0.0,
|
498
|
+
s_float_lit(0.0),
|
499
499
|
in[2],
|
500
500
|
in[6],
|
501
501
|
in[10],
|
502
|
-
0.0
|
502
|
+
s_float_lit(0.0)
|
503
503
|
};
|
504
504
|
|
505
505
|
temp[12] = -((m12 * temp[0]) + (m13 * temp[4]) + (m14 * temp[8]));
|
506
506
|
temp[13] = -((m12 * temp[1]) + (m13 * temp[5]) + (m14 * temp[9]));
|
507
507
|
temp[14] = -((m12 * temp[2]) + (m13 * temp[6]) + (m14 * temp[10]));
|
508
|
-
temp[15] = 1.0;
|
508
|
+
temp[15] = s_float_lit(1.0);
|
509
509
|
|
510
510
|
mat4_copy(temp, out);
|
511
511
|
}
|
@@ -539,7 +539,7 @@ int mat4_inverse_affine(const mat4_t in, mat4_t out)
|
|
539
539
|
return 0;
|
540
540
|
}
|
541
541
|
|
542
|
-
det = 1.0 / det;
|
542
|
+
det = s_float_lit(1.0) / det;
|
543
543
|
|
544
544
|
out[0] = temp[0] * det;
|
545
545
|
out[1] = temp[1] * det;
|
@@ -559,8 +559,8 @@ int mat4_inverse_affine(const mat4_t in, mat4_t out)
|
|
559
559
|
out[13] = -((m12 * temp[1]) + (m13 * temp[5]) + (m14 * temp[9 ]));
|
560
560
|
out[14] = -((m12 * temp[2]) + (m13 * temp[6]) + (m14 * temp[10]));
|
561
561
|
|
562
|
-
out[3] = out[7] = out[11] = 0.0;
|
563
|
-
out[15] = 1.0;
|
562
|
+
out[3] = out[7] = out[11] = s_float_lit(0.0);
|
563
|
+
out[15] = s_float_lit(1.0);
|
564
564
|
|
565
565
|
return 1;
|
566
566
|
}
|
@@ -644,7 +644,7 @@ int mat4_inverse_general(const mat4_t in, mat4_t out)
|
|
644
644
|
}
|
645
645
|
|
646
646
|
mat4_adjoint(in, out);
|
647
|
-
det = 1.0 / det;
|
647
|
+
det = s_float_lit(1.0) / det;
|
648
648
|
for (index = 0; index < 16; ++index) {
|
649
649
|
out[index] *= det;
|
650
650
|
}
|
@@ -673,7 +673,7 @@ void mat4_translation(s_float_t x, s_float_t y, s_float_t z, mat4_t out) {
|
|
673
673
|
s_float_t m12 = x;
|
674
674
|
s_float_t m13 = y;
|
675
675
|
s_float_t m14 = z;
|
676
|
-
s_float_t m15 = 1;
|
676
|
+
s_float_t m15 = s_float_lit(1.0);
|
677
677
|
|
678
678
|
mat4_copy(g_mat4_identity, out);
|
679
679
|
|
data/ext/snow-math/maths_local.h
CHANGED
@@ -40,6 +40,7 @@ typedef float s_float_t;
|
|
40
40
|
#define s_atan(X) (atanf((X)))
|
41
41
|
#define s_fabs(X) (fabsf((X)))
|
42
42
|
#define s_sqrt(X) (sqrtf((X)))
|
43
|
+
#define s_float_lit(X) (X##f)
|
43
44
|
#else
|
44
45
|
typedef double s_float_t;
|
45
46
|
#define s_cos(X) (cos((X)))
|
@@ -50,6 +51,7 @@ typedef double s_float_t;
|
|
50
51
|
#define s_atan(X) (atan((X)))
|
51
52
|
#define s_fabs(X) (fabs((X)))
|
52
53
|
#define s_sqrt(X) (sqrt((X)))
|
54
|
+
#define s_float_lit(X) (X)
|
53
55
|
#endif
|
54
56
|
|
55
57
|
typedef s_float_t mat4_t[16];
|
@@ -67,10 +69,10 @@ typedef s_float_t quat_t[4];
|
|
67
69
|
*
|
68
70
|
* It should be stressed that this is absolutely not an accurate epsilon.
|
69
71
|
*/
|
70
|
-
#define S_FLOAT_EPSILON (1.0e-9)
|
72
|
+
#define S_FLOAT_EPSILON s_float_lit(1.0e-9)
|
71
73
|
|
72
|
-
#define S_DEG2RAD (0.01745329)
|
73
|
-
#define S_RAD2DEG (57.2957795)
|
74
|
+
#define S_DEG2RAD s_float_lit(0.01745329)
|
75
|
+
#define S_RAD2DEG s_float_lit(57.2957795)
|
74
76
|
|
75
77
|
|
76
78
|
|
data/ext/snow-math/quat.c
CHANGED
@@ -14,7 +14,7 @@ extern "C"
|
|
14
14
|
{
|
15
15
|
#endif /* __cplusplus */
|
16
16
|
|
17
|
-
const quat_t g_quat_identity = {0.0, 0.0, 0.0, 1.0};
|
17
|
+
const quat_t g_quat_identity = { s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0), s_float_lit(1.0) };
|
18
18
|
|
19
19
|
void quat_set(s_float_t x, s_float_t y, s_float_t z, s_float_t w, quat_t out)
|
20
20
|
{
|
@@ -36,8 +36,8 @@ void quat_copy(const quat_t in, quat_t out)
|
|
36
36
|
|
37
37
|
void quat_identity(quat_t q)
|
38
38
|
{
|
39
|
-
q[0] = q[1] = q[2] = 0.0;
|
40
|
-
q[3] = 1.0;
|
39
|
+
q[0] = q[1] = q[2] = s_float_lit(0.0);
|
40
|
+
q[3] = s_float_lit(1.0);
|
41
41
|
}
|
42
42
|
|
43
43
|
void quat_inverse(const quat_t in, quat_t out)
|
@@ -81,8 +81,8 @@ void quat_multiply_vec3(const quat_t left, const vec3_t right, vec3_t out)
|
|
81
81
|
vec3_t lxr_cross, lxlr_cross;
|
82
82
|
vec3_cross_product(left, right, lxr_cross);
|
83
83
|
vec3_cross_product(left, lxr_cross, lxlr_cross);
|
84
|
-
vec3_scale(lxr_cross, 2.0 * left[3], lxr_cross);
|
85
|
-
vec3_scale(lxlr_cross, 2.0, lxlr_cross);
|
84
|
+
vec3_scale(lxr_cross, s_float_lit(2.0) * left[3], lxr_cross);
|
85
|
+
vec3_scale(lxlr_cross, s_float_lit(2.0), lxlr_cross);
|
86
86
|
vec3_add(lxr_cross, lxlr_cross, lxr_cross);
|
87
87
|
vec3_add(right, lxr_cross, out);
|
88
88
|
}
|
@@ -92,7 +92,7 @@ void quat_from_angle_axis(s_float_t angle, s_float_t x, s_float_t y, s_float_t z
|
|
92
92
|
vec3_t v = {x, y, z};
|
93
93
|
vec3_normalize(v, v);
|
94
94
|
|
95
|
-
angle *= (S_DEG2RAD * 0.5);
|
95
|
+
angle *= (S_DEG2RAD * s_float_lit(0.5));
|
96
96
|
const s_float_t s = s_sin(angle);
|
97
97
|
|
98
98
|
out[0] = v[0] * s;
|
@@ -108,9 +108,9 @@ void quat_from_mat4(const mat4_t mat, quat_t out)
|
|
108
108
|
|
109
109
|
trace = mat[0] + mat[5] + mat[10];
|
110
110
|
if (trace > 0) {
|
111
|
-
r = s_sqrt(trace + 1.0);
|
112
|
-
out[3] = r * 0.5;
|
113
|
-
r = 0.5 / r;
|
111
|
+
r = s_sqrt(trace + s_float_lit(1.0));
|
112
|
+
out[3] = r * s_float_lit(0.5);
|
113
|
+
r = s_float_lit(0.5) / r;
|
114
114
|
out[0] = (mat[9] - mat[6]) * r;
|
115
115
|
out[1] = (mat[2] - mat[8]) * r;
|
116
116
|
out[2] = (mat[4] - mat[1]) * r;
|
@@ -122,10 +122,10 @@ void quat_from_mat4(const mat4_t mat, quat_t out)
|
|
122
122
|
index = 1;
|
123
123
|
}
|
124
124
|
|
125
|
-
r = s_sqrt(mat[index * 5] - (mat[((index + 1)) % 3 * 5] + mat[((index + 2) % 3) * 5]) + 1.0);
|
126
|
-
out[index] = r * 0.5;
|
125
|
+
r = s_sqrt(mat[index * 5] - (mat[((index + 1)) % 3 * 5] + mat[((index + 2) % 3) * 5]) + s_float_lit(1.0));
|
126
|
+
out[index] = r * s_float_lit(0.5);
|
127
127
|
|
128
|
-
if (r) r = 0.5 / r;
|
128
|
+
if (r) r = s_float_lit(0.5) / r;
|
129
129
|
|
130
130
|
switch (index)
|
131
131
|
{
|
@@ -159,10 +159,10 @@ void quat_from_mat3(const mat3_t mat, quat_t out)
|
|
159
159
|
|
160
160
|
trace = mat[0] + mat[4] + mat[8];
|
161
161
|
|
162
|
-
if (trace > 0.0) {
|
163
|
-
r = s_sqrt(trace + 1);
|
164
|
-
out[3] = r * 0.5;
|
165
|
-
r = 0.5 / r;
|
162
|
+
if (trace > s_float_lit(0.0)) {
|
163
|
+
r = s_sqrt(trace + s_float_lit(1.0));
|
164
|
+
out[3] = r * s_float_lit(0.5);
|
165
|
+
r = s_float_lit(0.5) / r;
|
166
166
|
out[0] = (m12 - m21) * r;
|
167
167
|
out[1] = (m20 - m02) * r;
|
168
168
|
out[2] = (m01 - m10) * r;
|
@@ -177,9 +177,9 @@ void quat_from_mat3(const mat3_t mat, quat_t out)
|
|
177
177
|
switch (index) {
|
178
178
|
default:
|
179
179
|
case 0:
|
180
|
-
r = out[0] = s_sqrt(mat[0] - (mat[4] + mat[8]) + 1) * 0.5;
|
181
|
-
if (r != 0.0 && r != -0.0) {
|
182
|
-
r = 0.5 / r;
|
180
|
+
r = out[0] = s_sqrt(mat[0] - (mat[4] + mat[8]) + s_float_lit(1.0)) * s_float_lit(0.5);
|
181
|
+
if (r != s_float_lit(0.0) && r != s_float_lit(-0.0)) {
|
182
|
+
r = s_float_lit(0.5) / r;
|
183
183
|
}
|
184
184
|
out[1] = (m10 + m01) * r;
|
185
185
|
out[2] = (m20 + m02) * r;
|
@@ -187,9 +187,9 @@ void quat_from_mat3(const mat3_t mat, quat_t out)
|
|
187
187
|
break;
|
188
188
|
|
189
189
|
case 1:
|
190
|
-
r = out[1] = s_sqrt(mat[4] - (mat[8] + mat[0]) + 1) * 0.5;
|
191
|
-
if (r != 0.0 && r != -0.0) {
|
192
|
-
r = 0.5 / r;
|
190
|
+
r = out[1] = s_sqrt(mat[4] - (mat[8] + mat[0]) + s_float_lit(1.0)) * s_float_lit(0.5);
|
191
|
+
if (r != s_float_lit(0.0) && r != s_float_lit(-0.0)) {
|
192
|
+
r = s_float_lit(0.5) / r;
|
193
193
|
}
|
194
194
|
out[0] = (m10 + m01) * r;
|
195
195
|
out[2] = (m12 + m21) * r;
|
@@ -197,9 +197,9 @@ void quat_from_mat3(const mat3_t mat, quat_t out)
|
|
197
197
|
break;
|
198
198
|
|
199
199
|
case 2:
|
200
|
-
r = out[2] = s_sqrt(mat[4] - (mat[0] + mat[4]) + 1) * 0.5;
|
201
|
-
if (r != 0.0 && r != -0.0) {
|
202
|
-
r = 0.5 / r;
|
200
|
+
r = out[2] = s_sqrt(mat[4] - (mat[0] + mat[4]) + s_float_lit(1.0)) * s_float_lit(0.5);
|
201
|
+
if (r != s_float_lit(0.0) && r != s_float_lit(-0.0)) {
|
202
|
+
r = s_float_lit(0.5) / r;
|
203
203
|
}
|
204
204
|
out[0] = (m20 + m02) * r;
|
205
205
|
out[1] = (m21 + m12) * r;
|
@@ -216,7 +216,7 @@ void quat_slerp(const quat_t from, const quat_t to, s_float_t delta, quat_t out)
|
|
216
216
|
|
217
217
|
dot = vec4_dot_product((const s_float_t *)from, (const s_float_t *)to);
|
218
218
|
|
219
|
-
if (dot < 0.0) {
|
219
|
+
if (dot < s_float_lit(0.0)) {
|
220
220
|
dot = -dot;
|
221
221
|
dx = -to[0];
|
222
222
|
dy = -to[1];
|
@@ -229,12 +229,12 @@ void quat_slerp(const quat_t from, const quat_t to, s_float_t delta, quat_t out)
|
|
229
229
|
dw = to[3];
|
230
230
|
}
|
231
231
|
|
232
|
-
delta = fminf(fmaxf(delta, 0.0), 1.0);
|
232
|
+
delta = fminf(fmaxf(delta, s_float_lit(0.0)), s_float_lit(1.0));
|
233
233
|
|
234
234
|
angle = s_acos(dot);
|
235
|
-
inverse_sin = 1.0 / s_sin(dot);
|
235
|
+
inverse_sin = s_float_lit(1.0) / s_sin(dot);
|
236
236
|
|
237
|
-
scale0 = s_sin((1.0 - delta) * angle) * inverse_sin;
|
237
|
+
scale0 = s_sin((s_float_lit(1.0) - delta) * angle) * inverse_sin;
|
238
238
|
scale1 = s_sin(delta * angle) * inverse_sin;
|
239
239
|
|
240
240
|
out[0] = (from[0] * scale0) + (dx * scale1);
|
data/ext/snow-math/vec3.c
CHANGED
@@ -14,8 +14,8 @@ extern "C"
|
|
14
14
|
{
|
15
15
|
#endif /* __cplusplus */
|
16
16
|
|
17
|
-
const vec3_t g_vec3_zero = {0.0, 0.0, 0.0};
|
18
|
-
const vec3_t g_vec3_one = {1.0, 1.0, 1.0};
|
17
|
+
const vec3_t g_vec3_zero = {s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0)};
|
18
|
+
const vec3_t g_vec3_one = {s_float_lit(1.0), s_float_lit(1.0), s_float_lit(1.0)};
|
19
19
|
|
20
20
|
void vec3_copy(const vec3_t in, vec3_t out)
|
21
21
|
{
|
@@ -51,7 +51,7 @@ s_float_t vec3_length(const vec3_t v)
|
|
51
51
|
void vec3_normalize(const vec3_t in, vec3_t out)
|
52
52
|
{
|
53
53
|
s_float_t mag = vec3_length(in);
|
54
|
-
if (mag) mag = 1.0 / mag;
|
54
|
+
if (mag) mag = s_float_lit(1.0) / mag;
|
55
55
|
out[0] = in[0] * mag;
|
56
56
|
out[1] = in[1] * mag;
|
57
57
|
out[2] = in[2] * mag;
|
@@ -87,9 +87,9 @@ void vec3_negate(const vec3_t v, vec3_t out)
|
|
87
87
|
|
88
88
|
void vec3_inverse(const vec3_t v, vec3_t out)
|
89
89
|
{
|
90
|
-
out[2] = (v[2] != 0.0 && v[2] != -0.0) ? (1.0 / v[2]) : v[2];
|
91
|
-
out[1] = (v[1] != 0.0 && v[1] != -0.0) ? (1.0 / v[1]) : v[1];
|
92
|
-
out[0] = (v[0] != 0.0 && v[0] != -0.0) ? (1.0 / v[0]) : v[0];
|
90
|
+
out[2] = (v[2] != s_float_lit(0.0) && v[2] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[2]) : v[2];
|
91
|
+
out[1] = (v[1] != s_float_lit(0.0) && v[1] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[1]) : v[1];
|
92
|
+
out[0] = (v[0] != s_float_lit(0.0) && v[0] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[0]) : v[0];
|
93
93
|
}
|
94
94
|
|
95
95
|
void vec3_project(const vec3_t in, const vec3_t normal, vec3_t out)
|
@@ -100,7 +100,7 @@ void vec3_project(const vec3_t in, const vec3_t normal, vec3_t out)
|
|
100
100
|
void vec3_reflect(const vec3_t in, const vec3_t normal, vec3_t out)
|
101
101
|
{
|
102
102
|
vec3_t temp;
|
103
|
-
vec3_scale(normal, 2 * vec3_dot_product(in, normal), temp);
|
103
|
+
vec3_scale(normal, s_float_lit(2.0) * vec3_dot_product(in, normal), temp);
|
104
104
|
vec3_subtract(in, temp, out);
|
105
105
|
}
|
106
106
|
|
@@ -134,7 +134,7 @@ void vec3_scale(const vec3_t v, s_float_t scalar, vec3_t out)
|
|
134
134
|
int vec3_divide(const vec3_t v, s_float_t divisor, vec3_t out)
|
135
135
|
{
|
136
136
|
if (divisor) {
|
137
|
-
divisor = (
|
137
|
+
divisor = s_float_lit(1.0) / divisor;
|
138
138
|
out[2] = v[2] * divisor;
|
139
139
|
out[1] = v[1] * divisor;
|
140
140
|
out[0] = v[0] * divisor;
|
data/ext/snow-math/vec4.c
CHANGED
@@ -14,9 +14,9 @@ extern "C"
|
|
14
14
|
{
|
15
15
|
#endif /* __cplusplus */
|
16
16
|
|
17
|
-
const vec4_t g_vec4_zero = {0.0, 0.0, 0.0, 0.0};
|
18
|
-
const vec4_t g_vec4_one = {1.0, 1.0, 1.0, 1.0};
|
19
|
-
const vec4_t g_vec4_identity = {0.0, 0.0, 0.0, 1.0};
|
17
|
+
const vec4_t g_vec4_zero = {s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0)};
|
18
|
+
const vec4_t g_vec4_one = {s_float_lit(1.0), s_float_lit(1.0), s_float_lit(1.0), s_float_lit(1.0)};
|
19
|
+
const vec4_t g_vec4_identity = {s_float_lit(0.0), s_float_lit(0.0), s_float_lit(0.0), s_float_lit(1.0)};
|
20
20
|
|
21
21
|
void vec4_copy(const vec4_t in, vec4_t out)
|
22
22
|
{
|
@@ -54,7 +54,7 @@ s_float_t vec4_length(const vec4_t v)
|
|
54
54
|
void vec4_normalize(const vec4_t in, vec4_t out)
|
55
55
|
{
|
56
56
|
s_float_t mag = vec4_length(in);
|
57
|
-
if (mag) mag = 1.0 / mag;
|
57
|
+
if (mag) mag = s_float_lit(1.0) / mag;
|
58
58
|
out[0] = in[0] * mag;
|
59
59
|
out[1] = in[1] * mag;
|
60
60
|
out[2] = in[2] * mag;
|
@@ -95,10 +95,10 @@ void vec4_negate(const vec4_t v, vec4_t out)
|
|
95
95
|
|
96
96
|
void vec4_inverse(const vec4_t v, vec4_t out)
|
97
97
|
{
|
98
|
-
out[3] = (v[3] != 0.0 && v[3] != -0.0) ? (1.0 / v[3]) : v[3];
|
99
|
-
out[2] = (v[2] != 0.0 && v[2] != -0.0) ? (1.0 / v[2]) : v[2];
|
100
|
-
out[1] = (v[1] != 0.0 && v[1] != -0.0) ? (1.0 / v[1]) : v[1];
|
101
|
-
out[0] = (v[0] != 0.0 && v[0] != -0.0) ? (1.0 / v[0]) : v[0];
|
98
|
+
out[3] = (v[3] != s_float_lit(0.0) && v[3] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[3]) : v[3];
|
99
|
+
out[2] = (v[2] != s_float_lit(0.0) && v[2] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[2]) : v[2];
|
100
|
+
out[1] = (v[1] != s_float_lit(0.0) && v[1] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[1]) : v[1];
|
101
|
+
out[0] = (v[0] != s_float_lit(0.0) && v[0] != s_float_lit(-0.0)) ? (s_float_lit(1.0) / v[0]) : v[0];
|
102
102
|
}
|
103
103
|
|
104
104
|
void vec4_project(const vec4_t in, const vec4_t normal, vec4_t out)
|
@@ -109,7 +109,7 @@ void vec4_project(const vec4_t in, const vec4_t normal, vec4_t out)
|
|
109
109
|
void vec4_reflect(const vec4_t in, const vec4_t normal, vec4_t out)
|
110
110
|
{
|
111
111
|
vec4_t temp;
|
112
|
-
vec4_scale(normal, 2 * vec4_dot_product(in, normal), temp);
|
112
|
+
vec4_scale(normal, s_float_lit(2.0) * vec4_dot_product(in, normal), temp);
|
113
113
|
vec4_subtract(in, temp, out);
|
114
114
|
}
|
115
115
|
|
@@ -133,7 +133,7 @@ void vec4_scale(const vec4_t v, s_float_t scalar, vec4_t out)
|
|
133
133
|
int vec4_divide(const vec4_t v, s_float_t divisor, vec4_t out)
|
134
134
|
{
|
135
135
|
if (divisor) {
|
136
|
-
divisor = (
|
136
|
+
divisor = s_float_lit(1.0) / divisor;
|
137
137
|
out[3] = v[3] * divisor;
|
138
138
|
out[2] = v[2] * divisor;
|
139
139
|
out[1] = v[1] * divisor;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snow-math
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noel Raymond Cower
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Math types built on the SnowPalm math code
|
14
14
|
email: ncower@gmail.com
|
@@ -21,15 +21,12 @@ extra_rdoc_files:
|
|
21
21
|
files:
|
22
22
|
- lib/snow-math/array_cache.rb
|
23
23
|
- lib/snow-math/inspect.rb
|
24
|
-
- lib/snow-math/line.rb
|
25
24
|
- lib/snow-math/mat3.rb
|
26
25
|
- lib/snow-math/mat4.rb
|
27
|
-
- lib/snow-math/plane.rb
|
28
26
|
- lib/snow-math/ptr.rb
|
29
27
|
- lib/snow-math/quat.rb
|
30
28
|
- lib/snow-math/swizzle.rb
|
31
29
|
- lib/snow-math/to_a.rb
|
32
|
-
- lib/snow-math/vec2.rb
|
33
30
|
- lib/snow-math/vec3.rb
|
34
31
|
- lib/snow-math/vec4.rb
|
35
32
|
- lib/snow-math.rb
|
data/lib/snow-math/line.rb
DELETED
File without changes
|
data/lib/snow-math/plane.rb
DELETED
File without changes
|
data/lib/snow-math/vec2.rb
DELETED
File without changes
|