URI:
       tvector_math.c - slidergrid - grid of elastic sliders on a frictional surface
  HTML git clone git://src.adamsgaard.dk/slidergrid
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tvector_math.c (2341B)
       ---
            1 #include <math.h>
            2 #include "typedefs.h"
            3 
            4 
            5 // constructors
            6 inline Float3 make_float3(const Float x, const Float y, const Float z)
            7 {
            8     Float3 v = {.x = x, .y = y, .z = z};
            9     return v;
           10 }
           11 
           12 inline Float3 zeroes_float3()
           13 {
           14     return make_float3(0., 0., 0.);
           15 }
           16 
           17 inline Float3 ones_float3()
           18 {
           19     return make_float3(1., 1., 1.);
           20 }
           21 
           22 
           23 // single-vector operations
           24 inline Float3 copy_float3(const Float3 v)
           25 {
           26     return make_float3(v.x, v.y, v.z);
           27 }
           28 
           29 inline Float norm_float3(const Float3 v)
           30 {
           31     return sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
           32 }
           33 
           34 
           35 // vector-vector operations
           36 inline Float3 add_float3(const Float3 v1, const Float3 v2)
           37 {
           38     return make_float3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
           39 }
           40 
           41 inline Float3 subtract_float3(const Float3 v1, const Float3 v2)
           42 {
           43     return make_float3(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
           44 }
           45 
           46 inline Float3 multiply_float3(const Float3 v1, const Float3 v2)
           47 {
           48     return make_float3(v1.x*v2.x, v1.y*v2.y, v1.z*v2.z);
           49 }
           50 
           51 inline Float3 divide_float3(const Float3 v1, const Float3 v2)
           52 {
           53     return make_float3(v1.x/v2.x, v1.y/v2.y, v1.z/v2.z);
           54 }
           55 
           56 inline Float3 cross_float3(const Float3 v1, const Float3 v2)
           57 {
           58     return make_float3(
           59             v1.y*v2.z - v1.z*v2.y,
           60             v1.z*v2.x - v1.x*v2.z,
           61             v1.x*v2.y - v1.y*v2.x);
           62 }
           63 
           64 inline Float dot_float3(const Float3 v1, const Float3 v2)
           65 {
           66     return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
           67 }
           68 
           69 // vector-scalar operations
           70 inline Float3 add_float3_scalar(const Float3 v, const Float s)
           71 {
           72     return make_float3(v.x + s, v.y + s, v.z + s);
           73 }
           74 
           75 inline Float3 add_scalar_float3(const Float s, const Float3 v)
           76 {
           77     return add_float3_scalar(v, s);
           78 }
           79 
           80 inline Float3 subtract_float3_scalar(const Float3 v, const Float s)
           81 {
           82     return make_float3(v.x - s, v.y - s, v.z - s);
           83 }
           84 
           85 inline Float3 subtract_scalar_float3(const Float s, const Float3 v)
           86 {
           87     return make_float3(s - v.x, s - v.y, s - v.z);
           88 }
           89 
           90 inline Float3 multiply_float3_scalar(const Float3 v, const Float s)
           91 {
           92     return make_float3(v.x*s, v.y*s, v.z*s);
           93 }
           94 
           95 inline Float3 multiply_scalar_float3(const Float s, const Float3 v)
           96 {
           97     return multiply_float3_scalar(v, s);
           98 }
           99 
          100 inline Float3 divide_float3_scalar(const Float3 v, const Float s)
          101 {
          102     return make_float3(v.x/s, v.y/s, v.z/s);
          103 }
          104 
          105 inline Float3 divide_scalar_float3(const Float s, const Float3 v)
          106 {
          107     return make_float3(s/v.x, s/v.y, s/v.z);
          108 }