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 }