Модульные тесты для Vector2, Vector3, Quaternion и Versor: is unit, is zero, is identity

This commit is contained in:
Andrey Pokidov 2025-02-11 23:54:38 +07:00
parent 47ba771b68
commit 2d8240265c
74 changed files with 999 additions and 348 deletions

View file

@ -33,6 +33,12 @@ extern inline double bgc_quaternion_get_square_modulus_fp64(const BgcQuaternionF
extern inline float bgc_quaternion_get_modulus_fp32(const BgcQuaternionFP32* quaternion);
extern inline double bgc_quaternion_get_modulus_fp64(const BgcQuaternionFP64* quaternion);
extern inline int bgc_quaternion_is_zero_fp32(const BgcQuaternionFP32* quaternion);
extern inline int bgc_quaternion_is_zero_fp64(const BgcQuaternionFP64* quaternion);
extern inline int bgc_quaternion_is_unit_fp32(const BgcQuaternionFP32* quaternion);
extern inline int bgc_quaternion_is_unit_fp64(const BgcQuaternionFP64* quaternion);
extern inline int bgc_quaternion_normalize_fp32(BgcQuaternionFP32* quaternion);
extern inline int bgc_quaternion_normalize_fp64(BgcQuaternionFP64* quaternion);

View file

@ -219,6 +219,30 @@ inline double bgc_quaternion_get_modulus_fp64(const BgcQuaternionFP64* quaternio
return sqrt(bgc_quaternion_get_square_modulus_fp64(quaternion));
}
// ================== Is Zero =================== //
inline int bgc_quaternion_is_zero_fp32(const BgcQuaternionFP32* quaternion)
{
return bgc_quaternion_get_square_modulus_fp32(quaternion) <= BGC_SQUARE_EPSYLON_FP32;
}
inline int bgc_quaternion_is_zero_fp64(const BgcQuaternionFP64* quaternion)
{
return bgc_quaternion_get_square_modulus_fp64(quaternion) <= BGC_SQUARE_EPSYLON_FP64;
}
// ================== Is Unit =================== //
inline int bgc_quaternion_is_unit_fp32(const BgcQuaternionFP32* quaternion)
{
return bgc_is_sqare_value_unit_fp32(bgc_quaternion_get_square_modulus_fp32(quaternion));
}
inline int bgc_quaternion_is_unit_fp64(const BgcQuaternionFP64* quaternion)
{
return bgc_is_sqare_value_unit_fp64(bgc_quaternion_get_square_modulus_fp64(quaternion));
}
// =============== Normalization ================ //
inline int bgc_quaternion_normalize_fp32(BgcQuaternionFP32* quaternion)

View file

@ -25,8 +25,8 @@ extern inline void bgc_versor_set_turn_fp64(const BgcVector3FP32* axis, const do
extern inline void bgc_versor_set_rotation_fp32(const BgcRotation3FP32* rotation, BgcVersorFP32* result);
extern inline void bgc_versor_set_rotation_fp64(const BgcRotation3FP64* rotation, BgcVersorFP64* result);
extern inline int bgc_versor_is_idle_fp32(const BgcVersorFP32* versor);
extern inline int bgc_versor_is_idle_fp64(const BgcVersorFP64* versor);
extern inline int bgc_versor_is_identity_fp32(const BgcVersorFP32* versor);
extern inline int bgc_versor_is_identity_fp64(const BgcVersorFP64* versor);
extern inline void bgc_versor_convert_fp64_to_fp32(const BgcVersorFP64* versor, BgcVersorFP32* result);
extern inline void bgc_versor_convert_fp32_to_fp64(const BgcVersorFP32* versor, BgcVersorFP64* result);

View file

@ -194,12 +194,12 @@ inline void bgc_versor_set_rotation_fp64(const BgcRotation3FP64* rotation, BgcVe
// ================= Comparison ================= //
inline int bgc_versor_is_idle_fp32(const BgcVersorFP32* versor)
inline int bgc_versor_is_identity_fp32(const BgcVersorFP32* versor)
{
return 1.0f - BGC_EPSYLON_FP32 <= versor->s0 || versor->s0 <= -(1.0 - BGC_EPSYLON_FP32);
}
inline int bgc_versor_is_idle_fp64(const BgcVersorFP64* versor)
inline int bgc_versor_is_identity_fp64(const BgcVersorFP64* versor)
{
return 1.0 - BGC_EPSYLON_FP64 <= versor->s0 || versor->s0 <= -(1.0 - BGC_EPSYLON_FP64);
}