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  }