diff options
Diffstat (limited to 'maths.c')
-rw-r--r-- | maths.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -64,6 +64,15 @@ void init_maths(void) { mtx_cpy(mtx_stack[0], m); } +int fpow(int a, int p) { + int r = a; + p--; + while (p--) { + r = (r * a) >> fbits; + } + return r; +} + int* mtx_iden(int* m) { register int o = f1; m[0] = o; @@ -228,6 +237,23 @@ int* vec_cpy(int* d, const int* s, int c) { return d; } +int* vec_ref(int* d, const int* i, const int* n, int c) { + int r, j; + int dp = 2 * vec_dot(n, i, c); + for (j = r = 0; j < c; j++) { + d[j] = i[j] - ((dp * n[j]) >> fbits); + } + return d; +} + +int vec_dot(const int* a, const int* b, int d) { + int r, i; + for (i = r = 0; i < d; i++) { + r += a[i] * b[i] >> fbits; + } + return r; +} + void persp(int* v, int asp) { v[2] += !v[2]; v[0] = ((v[0] << fbits) / v[2]); |