Add vec4 types and functions
This commit is contained in:
parent
01c5def71f
commit
9ba7a8c414
@ -25,6 +25,20 @@ typedef struct {
|
||||
f32 z;
|
||||
} 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_sub(T, v1, v2) vec_sub_##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_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
|
||||
|
@ -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};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user