vector.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* vector.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: salee2 <salee2@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/05/24 20:23:08 by salee2 #+# #+# */ 9 /* Updated: 2023/05/24 20:23:09 by salee2 ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "include/minirt.h" 14 15 t_vec2 vec2_(double x, double y) 16 { 17 t_vec2 this; 18 19 this.x = x; 20 this.y = y; 21 return (this); 22 } 23 24 t_vec3 vec3_(double ai, double bj, double ck) 25 { 26 t_vec3 this; 27 28 this.ai = ai; 29 this.bj = bj; 30 this.ck = ck; 31 return (this); 32 } 33 34 t_point3 point3_(double x, double y, double z) 35 { 36 t_point3 this; 37 38 this.x = x; 39 this.y = y; 40 this.z = z; 41 return this; 42 } 43 44 t_color3 color3_(double r, double g, double b) 45 { 46 t_color3 this; 47 48 this.r = r; 49 this.g = g; 50 this.b = b; 51 return this; 52 } 53 54 t_vec3 add(t_vec3 u, t_vec3 v) 55 { 56 return (t_vec3){{{u.ai + v.ai, u.bj + v.bj, u.ck + v.ck}}}; 57 } 58 59 t_vec3 sub(t_vec3 u, t_vec3 v) 60 { 61 return (t_vec3){{{u.ai - v.ai, u.bj - v.bj, u.ck - v.ck}}}; 62 } 63 64 t_vec3 scl_mul(double t, t_vec3 vector) 65 { 66 return (t_vec3){{{t * vector.ai, t * vector.bj, t * vector.ck}}}; 67 } 68 69 double mag_sq(t_vec3 vec) 70 { 71 return (vec.ai * vec.ai + vec.bj * vec.bj + vec.ck * vec.ck); 72 } 73 74 double mag(t_vec3 vec) 75 { 76 return (sqrt(mag_sq(vec))); 77 } 78 79 t_vec3 norm(t_vec3 vector) 80 { 81 double m = mag(vector); 82 83 // if (m == 0) 84 // { 85 // printf("Error\n:Devider is 0"); 86 // exit(EXIT_FAILURE); 87 // } 88 return (scl_mul(1.0/m, vector)); 89 } 90 91 double dot(t_vec3 u, t_vec3 v) 92 { 93 return (u.ai * v.ai + u.bj * v.bj + u.ck * v.ck); 94 } 95 96 t_vec3 cross(t_vec3 u, t_vec3 v) 97 { 98 return ((t_vec3) {{{u.bj * v.ck - u.ck * v.bj, 99 u.ck * v.ai - u.ai * v.ck, 100 u.ai * v.bj - u.bj * v.ai}}}); 101 } 102 103 t_vec3 hadam_prod(t_vec3 u, t_vec3 v) 104 { 105 return (t_vec3) {{{u.ai * v.ai, u.bj * v.bj, u.ck * v.ck}}}; 106 } 107 108 t_vec3 elem_min(t_vec3 u, t_vec3 v) 109 { 110 if(v.ai < u.ai) 111 u.ai = v.ai; 112 if(v.bj < u.bj) 113 u.bj = v.bj; 114 if(v.ck < u.ck) 115 u.ck = v.ck; 116 return (u); 117 }