suicmez/game/inc/suic_math.c
2025-12-20 15:09:29 +05:30

38 lines
967 B
C

#include "suic_math.h"
#include <math.h>
SuicVec3 suic_v3(float x, float y, float z) {
return (SuicVec3){x, y, z};
}
SuicVec3 suic_v3_add(SuicVec3 a, SuicVec3 b) {
return suic_v3(a.x + b.x, a.y + b.y, a.z + b.z);
}
SuicVec3 suic_v3_sub(SuicVec3 a, SuicVec3 b) {
return suic_v3(a.x - b.x, a.y - b.y, a.z - b.z);
}
SuicVec3 suic_v3_mul(SuicVec3 a, float s) {
return suic_v3(a.x * s, a.y * s, a.z * s);
}
float suic_v3_dot(SuicVec3 a, SuicVec3 b) {
return a.x * b.x + a.y * b.y + a.z * b.z;
}
float suic_v3_len(SuicVec3 a) {
return sqrtf(a.x * a.x + a.y * a.y + a.z * a.z);
}
SuicVec3 suic_v3_norm(SuicVec3 a) {
float l = suic_v3_len(a);
if (l <= 1e-6f) return suic_v3(0, 0, 1);
return suic_v3(a.x / l, a.y / l, a.z / l);
}
SuicVec3 suic_v3_normalize(SuicVec3 v) {
float len = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
if (len < 0.0001f) return suic_v3(0, 1, 0);
return suic_v3(v.x / len, v.y / len, v.z / len);
}