Add vec4 types and functions

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

View File

@@ -184,3 +184,83 @@ vec3f_t vec_rotate_vec3f_t(vec3f_t original, vec3f_t rotation) {
};
// 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};
}