summaryrefslogtreecommitdiff
path: root/inc/shared/matrix.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-01-24 14:15:25 -0900
committerKent Overstreet <kent.overstreet@gmail.com>2017-01-24 14:15:25 -0900
commit7f362ff033196b4c60f2c4279fd0f357844227b3 (patch)
treea8a46f27dc1b03bb1501fe41b1d1373e20b043d7 /inc/shared/matrix.h
parent149617bab9a13c60e78009734b619f1c1238cd12 (diff)
Fewer globals
Diffstat (limited to 'inc/shared/matrix.h')
-rw-r--r--inc/shared/matrix.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/inc/shared/matrix.h b/inc/shared/matrix.h
index b106d8c..7574edf 100644
--- a/inc/shared/matrix.h
+++ b/inc/shared/matrix.h
@@ -64,8 +64,9 @@ typedef struct {
(d)[2]=(a)[2]+(b)[2]*(c)[2])
#define VectorEmpty(v) ((v)[0]==0&&(v)[1]==0&&(v)[2]==0)
#define VectorCompare(v1,v2) ((v1)[0]==(v2)[0]&&(v1)[1]==(v2)[1]&&(v1)[2]==(v2)[2])
-#define VectorLength(v) (sqrt(DotProduct((v),(v))))
-#define VectorLengthSquared(v) (DotProduct((v),(v)))
+#define VectorLength(v) sqrt(DotProduct((v),(v)))
+#define VectorLengthSquared(v) DotProduct((v),(v))
+
#define VectorScale(in,scale,out) \
((out)[0]=(in)[0]*(scale), \
(out)[1]=(in)[1]*(scale), \
@@ -74,6 +75,16 @@ typedef struct {
((out)[0]=(in)[0]*(scale)[0], \
(out)[1]=(in)[1]*(scale)[1], \
(out)[2]=(in)[2]*(scale)[2])
+
+#define VectorScaleAcc(in,scale,out) \
+ ((out)[0]+=(in)[0]*(scale), \
+ (out)[1]+=(in)[1]*(scale), \
+ (out)[2]+=(in)[2]*(scale))
+#define VectorVectorScaleAcc(in,scale,out) \
+ ((out)[0]+=(in)[0]*(scale)[0], \
+ (out)[1]+=(in)[1]*(scale)[1], \
+ (out)[2]+=(in)[2]*(scale)[2])
+
#define DistanceSquared(v1,v2) \
(((v1)[0]-(v2)[0])*((v1)[0]-(v2)[0])+ \
((v1)[1]-(v2)[1])*((v1)[1]-(v2)[1])+ \
@@ -83,14 +94,17 @@ typedef struct {
((d)[0]=LerpAngle((a)[0],(b)[0],c), \
(d)[1]=LerpAngle((a)[1],(b)[1],c), \
(d)[2]=LerpAngle((a)[2],(b)[2],c))
+
#define LerpVector(a,b,c,d) \
((d)[0]=(a)[0]+(c)*((b)[0]-(a)[0]), \
(d)[1]=(a)[1]+(c)*((b)[1]-(a)[1]), \
(d)[2]=(a)[2]+(c)*((b)[2]-(a)[2]))
-#define LerpVector2(a,b,c,d,e) \
- ((e)[0]=(a)[0]*(c)+(b)[0]*(d), \
- (e)[1]=(a)[1]*(c)+(b)[1]*(d), \
- (e)[2]=(a)[2]*(c)+(b)[2]*(d))
+
+#define LerpVector2(a,b,c,d,e) \
+ (VectorClear(e), \
+ VectorScaleAcc(a, c, e), \
+ VectorScaleAcc(b, d, e))
+
#define PlaneDiff(v,p) (DotProduct(v,(p)->normal)-(p)->dist)
#define Vector4Subtract(a,b,c) ((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2],(c)[3]=(a)[3]-(b)[3])