summaryrefslogtreecommitdiff
path: root/maths.c
diff options
context:
space:
mode:
Diffstat (limited to 'maths.c')
-rw-r--r--maths.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/maths.c b/maths.c
index 74d682d..f6f1912 100644
--- a/maths.c
+++ b/maths.c
@@ -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]);