Add cross product for 3D vectors

This commit is contained in:
Abdelrahman Said 2024-07-14 16:01:55 +01:00
parent 94287ff081
commit 83fa308a4b
2 changed files with 19 additions and 0 deletions

View File

@ -64,6 +64,7 @@ typedef struct {
#define vec_mul_num(T, v1, num) vec_mul_num_##T(v1, num) #define vec_mul_num(T, v1, num) vec_mul_num_##T(v1, num)
#define vec_div_num(T, v1, num) vec_div_num_##T(v1, num) #define vec_div_num(T, v1, num) vec_div_num_##T(v1, num)
#define vec_dot(T, v1, v2) vec_dot_##T(v1, v2) #define vec_dot(T, v1, v2) vec_dot_##T(v1, v2)
#define vec_cross(T, v1, v2) vec_cross_##T(v1, v2)
#define vec_magnitude(T, v) vec_magnitude_##T(v) #define vec_magnitude(T, v) vec_magnitude_##T(v)
#define vec_unit(T, v) vec_unit_##T(v) #define vec_unit(T, v) vec_unit_##T(v)
@ -91,6 +92,7 @@ vec3i_t vec_mul_vec3i_t(vec3i_t v1, vec3i_t v2);
vec3i_t vec_mul_num_vec3i_t(vec3i_t v1, i32 num); vec3i_t vec_mul_num_vec3i_t(vec3i_t v1, i32 num);
vec3i_t vec_div_num_vec3i_t(vec3i_t v1, i32 num); vec3i_t vec_div_num_vec3i_t(vec3i_t v1, i32 num);
i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2); i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2);
vec3i_t vec_cross_vec3i_t(vec3i_t v1, vec3i_t v2);
i32 vec_magnitude_vec3i_t(vec3i_t v); i32 vec_magnitude_vec3i_t(vec3i_t v);
vec3i_t vec_unit_vec3i_t(vec3i_t v); vec3i_t vec_unit_vec3i_t(vec3i_t v);
@ -100,6 +102,7 @@ vec3f_t vec_mul_vec3f_t(vec3f_t v1, vec3f_t v2);
vec3f_t vec_mul_num_vec3f_t(vec3f_t v1, f32 num); vec3f_t vec_mul_num_vec3f_t(vec3f_t v1, f32 num);
vec3f_t vec_div_num_vec3f_t(vec3f_t v1, f32 num); vec3f_t vec_div_num_vec3f_t(vec3f_t v1, f32 num);
f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2); f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2);
vec3f_t vec_cross_vec3f_t(vec3f_t v1, vec3f_t v2);
f32 vec_magnitude_vec3f_t(vec3f_t v); 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);

View File

@ -94,6 +94,14 @@ i32 vec_dot_vec3i_t(vec3i_t v1, vec3i_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
} }
vec3i_t vec_cross_vec3i_t(vec3i_t v1, vec3i_t v2) {
return (vec3i_t){
.x = v1.y * v2.z - v1.z * v2.y,
.y = v1.z * v2.x - v1.x * v2.z,
.z = v1.x * v2.y - v1.y * v2.x,
};
}
i32 vec_magnitude_vec3i_t(vec3i_t v) { i32 vec_magnitude_vec3i_t(vec3i_t v) {
i32 dot_product = vec_dot_vec3i_t(v, v); i32 dot_product = vec_dot_vec3i_t(v, v);
return (i32)sqrtf((f32)dot_product); return (i32)sqrtf((f32)dot_product);
@ -128,6 +136,14 @@ f32 vec_dot_vec3f_t(vec3f_t v1, vec3f_t v2) {
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
} }
vec3f_t vec_cross_vec3f_t(vec3f_t v1, vec3f_t v2) {
return (vec3f_t){
.x = v1.y * v2.z - v1.z * v2.y,
.y = v1.z * v2.x - v1.x * v2.z,
.z = v1.x * v2.y - v1.y * v2.x,
};
}
f32 vec_magnitude_vec3f_t(vec3f_t v) { f32 vec_magnitude_vec3f_t(vec3f_t v) {
f32 dot_product = vec_dot_vec3f_t(v, v); f32 dot_product = vec_dot_vec3f_t(v, v);
return sqrtf(dot_product); return sqrtf(dot_product);