tadd more helper functions, complete TY3 integration scheme - slidergrid - grid… | |
git clone git://src.adamsgaard.dk/slidergrid | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a270ef4ab316d4b52745938eb25ed87749b5fe0a | |
parent 129e0df22ec2470c059710b4b60635192552c0db | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 15 Mar 2016 13:43:44 -0700 | |
add more helper functions, complete TY3 integration scheme | |
Diffstat: | |
M slider.c | 12 ++++++++---- | |
M vector_math.c | 45 +++++++++++++++++++++++++++++… | |
M vector_math.h | 12 +++++++++++- | |
3 files changed, 62 insertions(+), 7 deletions(-) | |
--- | |
diff --git a/slider.c b/slider.c | |
t@@ -8,10 +8,10 @@ void print_slider_position(slider s) | |
printf("%f\t%f\t%f\n", s.pos.x, s.pos.y, s.pos.z); | |
} | |
+/* Explicit temporal integration scheme based on three-term Taylor expansion */ | |
void integrate_kinematics(slider s, Float dt, int iteration) | |
{ | |
- | |
- | |
+ s.acc = divide_float3_scalar(s.force, s.mass); | |
Float3 acc0; | |
if (iteration == 0) { | |
t@@ -30,9 +30,13 @@ void integrate_kinematics(slider s, Float dt, int iteration) | |
s.vel.y*dt + 0.5*s.acc.y*dt*dt + 1./6.*dacc_dt.y*dt*dt*dt, | |
s.vel.z*dt + 0.5*s.acc.z*dt*dt + 1./6.*dacc_dt.z*dt*dt*dt); | |
- s.pos = add_float3(s.pos, dpos_dt); | |
- | |
+ const Float3 dvel_dt = make_float3( | |
+ s.acc.x*dt + 0.5*dacc_dt.x*dt*dt, | |
+ s.acc.y*dt + 0.5*dacc_dt.y*dt*dt, | |
+ s.acc.z*dt + 0.5*dacc_dt.z*dt*dt); | |
+ s.pos = add_float3(s.pos, dpos_dt); | |
+ s.vel = add_float3(s.vel, dvel_dt); | |
} | |
diff --git a/vector_math.c b/vector_math.c | |
t@@ -1,11 +1,20 @@ | |
#include "typedefs.h" | |
+ | |
+// constructor | |
inline Float3 make_float3(Float x, Float y, Float z) | |
{ | |
Float3 v = {.x = x, .y = y, .z = z}; | |
return v; | |
} | |
+inline Float3 copy_float3(Float3 v) | |
+{ | |
+ return make_float3(v.x, v.y, v.z); | |
+} | |
+ | |
+ | |
+// vector-vector operations | |
inline Float3 add_float3(Float3 v1, Float3 v2) | |
{ | |
return make_float3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); | |
t@@ -26,7 +35,39 @@ inline Float3 divide_float3(Float3 v1, Float3 v2) | |
return make_float3(v1.x/v2.x, v1.y/v2.y, v1.z/v2.z); | |
} | |
-inline Float3 copy_float3(Float3 v) | |
+ | |
+// vector-scalar operations | |
+inline Float3 add_float3_scalar(Float3 v, Float s) | |
{ | |
- return make_float3(v.x, v.y, v.z); | |
+ return make_float3(v.x + s, v.y + s, v.z + s); | |
+} | |
+ | |
+inline Float3 add_scalar_float3(Float s, Float3 v) | |
+{ | |
+ return add_float3_scalar(v, s); | |
+} | |
+ | |
+inline Float3 subtract_float3_scalar(Float3 v, Float s) | |
+{ | |
+ return make_float3(v.x - s, v.y - s, v.z - s); | |
+} | |
+ | |
+inline Float3 subtract_scalar_float3(Float s, Float3 v) | |
+{ | |
+ return make_float3(s - v.x, s - v.y, s - v.z); | |
+} | |
+ | |
+inline Float3 multiply_float3_scalar(Float3 v, Float s) | |
+{ | |
+ return make_float3(v.x*s, v.y*s, v.z*s); | |
+} | |
+ | |
+inline Float3 divide_float3_scalar(Float3 v, Float s) | |
+{ | |
+ return make_float3(v.x/s, v.y/s, v.z/s); | |
+} | |
+ | |
+inline Float3 divide_scalar_float3(Float s, Float3 v) | |
+{ | |
+ return make_float3(s/v.x, s/v.y, s/v.z); | |
} | |
diff --git a/vector_math.h b/vector_math.h | |
t@@ -1,8 +1,18 @@ | |
#include "typedefs.h" | |
+// constructor | |
Float3 make_float3(Float x, Float y, Float z); | |
+Float3 copy_float3(Float3 v); | |
+ | |
+// vector-vector operations | |
Float3 add_float3(Float3 v1, Float3 v2); | |
Float3 subtract_float3(Float3 v1, Float3 v2); | |
Float3 multiply_float3(Float3 v1, Float3 v2); | |
Float3 divide_float3(Float3 v1, Float3 v2); | |
-Float3 copy_float3(Float3 v); | |
+ | |
+// vector-scalar operations | |
+Float3 multiply_float3_scalar(Float3 v, Float s); | |
+Float3 divide_float3_scalar(Float3 v, Float s); | |
+Float3 divide_scalar_float3(Float s, Float3 v); | |
+Float3 add_float3_scalar(Float3 v, Float s) | |
+Float3 add_scalar_float3(Float s, Float3 v) |