Add vector types and functions

This commit is contained in:
Abdelrahman Said 2023-12-20 00:05:27 +00:00
parent 25ff01b815
commit 36913bf365
2 changed files with 118 additions and 0 deletions

53
include/vector/vec.h Normal file
View File

@ -0,0 +1,53 @@
#ifndef VEC_H
#define VEC_H
#include "c_cpp_aliases/aliases.h"
typedef struct {
i32 x;
i32 y;
} vec2i_t;
typedef struct {
f32 x;
f32 y;
} vec2f_t;
typedef struct {
i32 x;
i32 y;
i32 z;
} vec3i_t;
typedef struct {
f32 x;
f32 y;
f32 z;
} vec3f_t;
#define vec_add(T, v1, v2) vec_add_##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_dot(T, v1, v2) vec_dot_##T(v1, v2)
vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2);
vec2i_t vec_sub_vec2i_t(vec2i_t v1, vec2i_t v2);
vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2);
i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2);
vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2);
vec2f_t vec_sub_vec2f_t(vec2f_t v1, vec2f_t v2);
vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2);
f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2);
vec3i_t vec_add_vec3i_t(vec3i_t v1, vec3i_t v2);
vec3i_t vec_sub_vec3i_t(vec3i_t v1, vec3i_t v2);
vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2);
i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2);
vec3f_t vec_add_vec3f_t(vec3f_t v1, vec3f_t v2);
vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2);
vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2);
f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2);
#endif // !VEC_H

65
src/vector/vec.c Normal file
View File

@ -0,0 +1,65 @@
#include "vector/vec.h"
vec2i_t vec_add_vec2i_t(vec2i_t v1, vec2i_t v2) {
return (vec2i_t){.x = v1.x + v2.x, .y = v1.y + v2.y};
}
vec2i_t vec_sub_vec2i_t(vec2i_t v1, vec2i_t v2) {
return (vec2i_t){.x = v1.x - v2.x, .y = v1.y - v2.y};
}
vec2i_t vec_mul_vec2i_t(vec2i_t v1, vec2i_t v2) {
return (vec2i_t){.x = v1.x * v2.x, .y = v1.y * v2.y};
}
i32 vec_dot_vec2i_t(vec2i_t v1, vec2i_t v2) {
return v1.x * v2.x + v1.y * v2.y;
}
vec2f_t vec_add_vec2f_t(vec2f_t v1, vec2f_t v2) {
return (vec2f_t){.x = v1.x + v2.x, .y = v1.y + v2.y};
}
vec2f_t vec_sub_vec2f_t(vec2f_t v1, vec2f_t v2) {
return (vec2f_t){.x = v1.x - v2.x, .y = v1.y - v2.y};
}
vec2f_t vec_mul_vec2f_t(vec2f_t v1, vec2f_t v2) {
return (vec2f_t){.x = v1.x * v2.x, .y = v1.y * v2.y};
}
f32 vec_dot_vec2f_t(vec2f_t v1, vec2f_t v2) {
return v1.x * v2.x + v1.y * v2.y;
}
vec3i_t vec_add_vec3i_t(vec3i_t v1, vec3i_t v2) {
return (vec3i_t){.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z};
}
vec3i_t vec_sub_vec3i_t(vec3i_t v1, vec3i_t v2) {
return (vec3i_t){.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z};
}
vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2) {
return (vec3i_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z};
}
i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
vec3f_t vec_add_vec3f_t(vec3f_t v1, vec3f_t v2) {
return (vec3f_t){.x = v1.x + v2.x, .y = v1.y + v2.y, .z = v1.z + v2.z};
}
vec3f_t vec_sub_vec3f_t(vec3f_t v1, vec3f_t v2) {
return (vec3f_t){.x = v1.x - v2.x, .y = v1.y - v2.y, .z = v1.z - v2.z};
}
vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2) {
return (vec3f_t){.x = v1.x * v2.x, .y = v1.y * v2.y, .z = v1.z * v2.z};
}
f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}