Add vec4 types and functions

This commit is contained in:
Abdelrahman Said 2024-06-30 00:09:22 +01:00
parent 01c5def71f
commit 9ba7a8c414
2 changed files with 112 additions and 0 deletions

View File

@ -25,6 +25,20 @@ typedef struct {
f32 z; f32 z;
} vec3f_t; } vec3f_t;
typedef struct {
i32 x;
i32 y;
i32 z;
i32 w;
} vec4i_t;
typedef struct {
f32 x;
f32 y;
f32 z;
f32 w;
} vec4f_t;
#define vec_add(T, v1, v2) vec_add_##T(v1, v2) #define vec_add(T, v1, v2) vec_add_##T(v1, v2)
#define vec_sub(T, v1, v2) vec_sub_##T(v1, v2) #define vec_sub(T, v1, v2) vec_sub_##T(v1, v2)
#define vec_mul(T, v1, v2) vec_mul_##T(v1, v2) #define vec_mul(T, v1, v2) vec_mul_##T(v1, v2)
@ -71,4 +85,22 @@ f32 vec_magnitude_vec3f_t(vec3f_t v);
vec3f_t vec_unit_vec3f_t(vec3f_t v); vec3f_t vec_unit_vec3f_t(vec3f_t v);
vec3f_t vec_rotate_vec3f_t(vec3f_t original, vec3f_t rotation); vec3f_t vec_rotate_vec3f_t(vec3f_t original, vec3f_t rotation);
vec4i_t vec_add_vec4i_t(vec4i_t v1, vec4i_t v2);
vec4i_t vec_sub_vec4i_t(vec4i_t v1, vec4i_t v2);
vec4i_t vec_mul_vec4i_t(vec4i_t v1, vec4i_t v2);
vec4i_t vec_mul_num_vec4i_t(vec4i_t v1, i32 num);
vec4i_t vec_div_num_vec4i_t(vec4i_t v1, i32 num);
i32 vec_dot_vec4i_t(vec4i_t v1, vec4i_t v2);
i32 vec_magnitude_vec4i_t(vec4i_t v);
vec4i_t vec_unit_vec4i_t(vec4i_t v);
vec4f_t vec_add_vec4f_t(vec4f_t v1, vec4f_t v2);
vec4f_t vec_sub_vec4f_t(vec4f_t v1, vec4f_t v2);
vec4f_t vec_mul_vec4f_t(vec4f_t v1, vec4f_t v2);
vec4f_t vec_mul_num_vec4f_t(vec4f_t v1, f32 num);
vec4f_t vec_div_num_vec4f_t(vec4f_t v1, f32 num);
f32 vec_dot_vec4f_t(vec4f_t v1, vec4f_t v2);
f32 vec_magnitude_vec4f_t(vec4f_t v);
vec4f_t vec_unit_vec4f_t(vec4f_t v);
#endif // !VEC_H #endif // !VEC_H

View File

@ -184,3 +184,83 @@ vec3f_t vec_rotate_vec3f_t(vec3f_t original, vec3f_t rotation) {
}; };
// clang-format on // clang-format on
} }
vec4i_t vec_add_vec4i_t(vec4i_t v1, vec4i_t v2) {
return (vec4i_t){
.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z, .w = v1.w + v2.w};
}
vec4i_t vec_sub_vec4i_t(vec4i_t v1, vec4i_t v2) {
return (vec4i_t){
.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z, .w = v1.w - v2.w};
}
vec4i_t vec_mul_vec4i_t(vec4i_t v1, vec4i_t v2) {
return (vec4i_t){
.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z, .w = v1.w * v2.w};
}
vec4i_t vec_mul_num_vec4i_t(vec4i_t v1, i32 num) {
return (vec4i_t){
.x = v1.x * num, .y = v1.y * num, .z = v1.z * num, .w = v1.w * num};
}
vec4i_t vec_div_num_vec4i_t(vec4i_t v1, i32 num) {
return (vec4i_t){
.x = v1.x / num, .y = v1.y / num, .z = v1.z / num, .w = v1.w / num};
}
i32 vec_dot_vec4i_t(vec4i_t v1, vec4i_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
}
i32 vec_magnitude_vec4i_t(vec4i_t v) {
i32 dot_product = vec_dot_vec4i_t(v, v);
return (i32)sqrtf((f32)dot_product);
}
vec4i_t vec_unit_vec4i_t(vec4i_t v) {
i32 magnitude = vec_magnitude_vec4i_t(v);
return (vec4i_t){v.x / magnitude, v.y / magnitude, v.z / magnitude,
v.w / magnitude};
}
vec4f_t vec_add_vec4f_t(vec4f_t v1, vec4f_t v2) {
return (vec4f_t){
.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z, .w = v1.w + v2.w};
}
vec4f_t vec_sub_vec4f_t(vec4f_t v1, vec4f_t v2) {
return (vec4f_t){
.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z, .w = v1.w - v2.w};
}
vec4f_t vec_mul_num_vec4f_t(vec4f_t v1, f32 num) {
return (vec4f_t){
.x = v1.x * num, .y = v1.y * num, .z = v1.z * num, .w = v1.w * num};
}
vec4f_t vec_div_num_vec4f_t(vec4f_t v1, f32 num) {
return (vec4f_t){
.x = v1.x / num, .y = v1.y / num, .z = v1.z / num, .w = v1.w / num};
}
vec4f_t vec_mul_vec4f_t(vec4f_t v1, vec4f_t v2) {
return (vec4f_t){
.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z, .w = v1.w * v2.w};
}
f32 vec_dot_vec4f_t(vec4f_t v1, vec4f_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
}
f32 vec_magnitude_vec4f_t(vec4f_t v) {
f32 dot_product = vec_dot_vec4f_t(v, v);
return sqrtf(dot_product);
}
vec4f_t vec_unit_vec4f_t(vec4f_t v) {
f32 magnitude = vec_magnitude_vec4f_t(v);
return (vec4f_t){v.x / magnitude, v.y / magnitude, v.z / magnitude,
v.w / magnitude};
}