Уменшение количества внутренних методов за счёт методов получения матрицы поворота для веросора; исправления в методах проверки матрицы поворота; добавление методов вычисления поворота (turn3) по матрице поворота 3x3

This commit is contained in:
Andrey Pokidov 2026-04-03 02:22:11 +07:00
parent abf99a7126
commit 54c762da14
9 changed files with 448 additions and 351 deletions

View file

@ -294,40 +294,38 @@ inline int bgc_fp64_matrix3x3_is_singular(const BGC_FP64_Matrix3x3* const matrix
inline int bgc_fp32_matrix3x3_is_rotation(const BGC_FP32_Matrix3x3* const matrix)
{
BGC_FP32_Matrix3x3 product;
const float r1r1 = matrix->r1c1 * matrix->r1c1 + matrix->r1c2 * matrix->r1c2 + matrix->r1c3 * matrix->r1c3;
const float r2r2 = matrix->r2c1 * matrix->r2c1 + matrix->r2c2 * matrix->r2c2 + matrix->r2c3 * matrix->r2c3;
const float r3r3 = matrix->r3c1 * matrix->r3c1 + matrix->r3c2 * matrix->r3c2 + matrix->r3c3 * matrix->r3c3;
product.r1c1 = matrix->r1c1 * matrix->r1c1 + matrix->r1c2 * matrix->r2c1 + matrix->r1c3 * matrix->r3c1;
product.r1c2 = matrix->r1c1 * matrix->r1c2 + matrix->r1c2 * matrix->r2c2 + matrix->r1c3 * matrix->r3c2;
product.r1c3 = matrix->r1c1 * matrix->r1c3 + matrix->r1c2 * matrix->r2c3 + matrix->r1c3 * matrix->r3c3;
const float r1r2 = matrix->r1c1 * matrix->r2c1 + matrix->r1c2 * matrix->r2c2 + matrix->r1c3 * matrix->r2c3;
const float r1r3 = matrix->r1c1 * matrix->r3c1 + matrix->r1c2 * matrix->r3c2 + matrix->r1c3 * matrix->r3c3;
const float r2r3 = matrix->r2c1 * matrix->r3c1 + matrix->r2c2 * matrix->r3c2 + matrix->r2c3 * matrix->r3c3;
product.r2c1 = matrix->r2c1 * matrix->r1c1 + matrix->r2c2 * matrix->r2c1 + matrix->r2c3 * matrix->r3c1;
product.r2c2 = matrix->r2c1 * matrix->r1c2 + matrix->r2c2 * matrix->r2c2 + matrix->r2c3 * matrix->r3c2;
product.r2c3 = matrix->r2c1 * matrix->r1c3 + matrix->r2c2 * matrix->r2c3 + matrix->r2c3 * matrix->r3c3;
product.r3c1 = matrix->r3c1 * matrix->r1c1 + matrix->r3c2 * matrix->r2c1 + matrix->r3c3 * matrix->r3c1;
product.r3c2 = matrix->r3c1 * matrix->r1c2 + matrix->r3c2 * matrix->r2c2 + matrix->r3c3 * matrix->r3c2;
product.r3c3 = matrix->r3c1 * matrix->r1c3 + matrix->r3c2 * matrix->r2c3 + matrix->r3c3 * matrix->r3c3;
return bgc_fp32_matrix3x3_is_identity(&product);
return bgc_fp32_is_square_unit(r1r1)
&& bgc_fp32_is_square_unit(r2r2)
&& bgc_fp32_is_square_unit(r3r3)
&& bgc_fp32_is_zero(r1r2)
&& bgc_fp32_is_zero(r1r3)
&& bgc_fp32_is_zero(r2r3);
}
inline int bgc_fp64_matrix3x3_is_rotation(const BGC_FP64_Matrix3x3* const matrix)
{
BGC_FP64_Matrix3x3 product;
const double r1r1 = matrix->r1c1 * matrix->r1c1 + matrix->r1c2 * matrix->r1c2 + matrix->r1c3 * matrix->r1c3;
const double r2r2 = matrix->r2c1 * matrix->r2c1 + matrix->r2c2 * matrix->r2c2 + matrix->r2c3 * matrix->r2c3;
const double r3r3 = matrix->r3c1 * matrix->r3c1 + matrix->r3c2 * matrix->r3c2 + matrix->r3c3 * matrix->r3c3;
product.r1c1 = matrix->r1c1 * matrix->r1c1 + matrix->r1c2 * matrix->r2c1 + matrix->r1c3 * matrix->r3c1;
product.r1c2 = matrix->r1c1 * matrix->r1c2 + matrix->r1c2 * matrix->r2c2 + matrix->r1c3 * matrix->r3c2;
product.r1c3 = matrix->r1c1 * matrix->r1c3 + matrix->r1c2 * matrix->r2c3 + matrix->r1c3 * matrix->r3c3;
const double r1r2 = matrix->r1c1 * matrix->r2c1 + matrix->r1c2 * matrix->r2c2 + matrix->r1c3 * matrix->r2c3;
const double r1r3 = matrix->r1c1 * matrix->r3c1 + matrix->r1c2 * matrix->r3c2 + matrix->r1c3 * matrix->r3c3;
const double r2r3 = matrix->r2c1 * matrix->r3c1 + matrix->r2c2 * matrix->r3c2 + matrix->r2c3 * matrix->r3c3;
product.r2c1 = matrix->r2c1 * matrix->r1c1 + matrix->r2c2 * matrix->r2c1 + matrix->r2c3 * matrix->r3c1;
product.r2c2 = matrix->r2c1 * matrix->r1c2 + matrix->r2c2 * matrix->r2c2 + matrix->r2c3 * matrix->r3c2;
product.r2c3 = matrix->r2c1 * matrix->r1c3 + matrix->r2c2 * matrix->r2c3 + matrix->r2c3 * matrix->r3c3;
product.r3c1 = matrix->r3c1 * matrix->r1c1 + matrix->r3c2 * matrix->r2c1 + matrix->r3c3 * matrix->r3c1;
product.r3c2 = matrix->r3c1 * matrix->r1c2 + matrix->r3c2 * matrix->r2c2 + matrix->r3c3 * matrix->r3c2;
product.r3c3 = matrix->r3c1 * matrix->r1c3 + matrix->r3c2 * matrix->r2c3 + matrix->r3c3 * matrix->r3c3;
return bgc_fp64_matrix3x3_is_identity(&product);
return bgc_fp64_is_square_unit(r1r1)
&& bgc_fp64_is_square_unit(r2r2)
&& bgc_fp64_is_square_unit(r3r3)
&& bgc_fp64_is_zero(r1r2)
&& bgc_fp64_is_zero(r1r3)
&& bgc_fp64_is_zero(r2r3);
}
// ================ Get Inverse ================= //