snow-math 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|