vec3.c (1906B)
1 2 #include "../include/vec3.h" 3 #include <math.h> 4 #include <stdio.h> 5 6 /* function implementations */ 7 double 8 vec3_getx(vec3 vec) 9 { 10 return vec.x; 11 } 12 13 double 14 vec3_gety(vec3 vec) 15 { 16 return vec.y; 17 } 18 19 double 20 vec3_getz(vec3 vec) 21 { 22 return vec.z; 23 } 24 25 /* needs testing */ 26 void 27 vec3_set(vec3 *v, double x, double y, double z) 28 { 29 v->x = x; 30 v->z = y; 31 v->z = z; 32 } 33 34 vec3 35 vec3_neg(vec3 v) 36 { 37 vec3 vec; 38 39 vec.x = -v.x; 40 vec.y = -v.y; 41 vec.z = -v.z; 42 43 return vec; 44 } 45 46 vec3 47 vec3_acc_add(vec3 v1, vec3 v2) 48 { 49 v1.x += v2.x; 50 v1.y += v2.y; 51 v1.z += v2.z; 52 53 return v1; 54 } 55 56 vec3 57 vec3_acc_mul(vec3 v, double t) 58 { 59 v.x *= t; 60 v.y *= t; 61 v.z *= t; 62 63 return v; 64 } 65 66 vec3 67 vec3_acc_div(vec3 v, double t) 68 { 69 return vec3_acc_mul(v, 1.0/t); 70 } 71 72 double 73 vec3_length(vec3 v) 74 { 75 return sqrt(vec3_length_squared(v)); 76 } 77 78 double 79 vec3_length_squared(vec3 v) 80 { 81 return v.x*v.x + v.y*v.y + v.z*v.z; 82 } 83 84 void 85 vec3_print(FILE * out, vec3 v) 86 { 87 fprintf(out, "%f %f %f\n", v.x, v.y, v.z); 88 } 89 90 vec3 91 vec3_add(vec3 u, vec3 v) 92 { 93 vec3 tmp; 94 95 tmp.x = u.x + v.x; 96 tmp.y = u.y + v.y; 97 tmp.z = u.z + v.z; 98 99 return tmp; 100 } 101 102 vec3 103 vec3_sub(vec3 u, vec3 v) 104 { 105 vec3 tmp; 106 107 tmp.x = u.x - v.x; 108 tmp.y = u.y - v.y; 109 tmp.z = u.z - v.z; 110 111 return tmp; 112 } 113 114 vec3 115 vec3_mul_vec(vec3 u, vec3 v) 116 { 117 vec3 tmp; 118 119 tmp.x = u.x * v.x; 120 tmp.y = u.y * v.y; 121 tmp.z = u.z * v.z; 122 123 return tmp; 124 } 125 126 vec3 127 vec3_mul(double t, vec3 v) 128 { 129 vec3 tmp; 130 131 tmp.x = t * v.x; 132 tmp.y = t * v.y; 133 tmp.z = t * v.z; 134 135 return tmp; 136 } 137 138 vec3 139 vec3_div(vec3 v, double t) 140 { 141 return vec3_mul(1.0/t, v); 142 } 143 144 double 145 vec3_dot(vec3 u, vec3 v) 146 { 147 double tmp = 0; 148 149 tmp = u.x * v.x + u.y * v.y + u.z * v.z; 150 return tmp; 151 } 152 153 vec3 154 vec3_cross(vec3 u, vec3 v) 155 { 156 vec3 tmp; 157 158 tmp.x = u.y * v.z - u.z * v.y; 159 tmp.y = u.z * v.x - u.x * v.z; 160 tmp.z = u.x * v.y - u.y * v.x; 161 162 return tmp; 163 } 164 165 vec3 166 vec3_unit_vector(vec3 v) 167 { 168 float len = sqrtf(vec3_dot(v, v)); 169 return vec3_mul(1.0f / len, v); 170 // return vec3_div(v, vec3_length(v)); 171 }