Исправление функции, которая находит трёхмерных поворот между двумя парами векторов
This commit is contained in:
parent
57280ac3f3
commit
2ce4b64ca3
7 changed files with 705 additions and 467 deletions
|
|
@ -40,20 +40,20 @@ extern inline void bgc_fp64_quaternion_add_scaled(BGC_FP64_Quaternion* sum, cons
|
|||
extern inline void bgc_fp32_quaternion_subtract(BGC_FP32_Quaternion* difference, const BGC_FP32_Quaternion* minuend, const BGC_FP32_Quaternion* subtrahend);
|
||||
extern inline void bgc_fp64_quaternion_subtract(BGC_FP64_Quaternion* difference, const BGC_FP64_Quaternion* minuend, const BGC_FP64_Quaternion* subtrahend);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_get_product(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_Quaternion* right);
|
||||
extern inline void bgc_fp64_quaternion_get_product(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_Quaternion* right);
|
||||
extern inline void bgc_fp32_quaternion_multiply_by_quaternion(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_Quaternion* right);
|
||||
extern inline void bgc_fp64_quaternion_multiply_by_quaternion(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_Quaternion* right);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_get_product_by_conjugate(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_Quaternion* right);
|
||||
extern inline void bgc_fp64_quaternion_get_product_by_conjugate(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_Quaternion* right);
|
||||
extern inline void bgc_fp32_quaternion_multiply_by_conjugate(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_Quaternion* right);
|
||||
extern inline void bgc_fp64_quaternion_multiply_by_conjugate(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_Quaternion* right);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_multiply(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* multiplicand, const float multipier);
|
||||
extern inline void bgc_fp64_quaternion_multiply(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* multiplicand, const double multipier);
|
||||
extern inline void bgc_fp32_quaternion_multiply_by_number(BGC_FP32_Quaternion* product, const BGC_FP32_Quaternion* multiplicand, const float multipier);
|
||||
extern inline void bgc_fp64_quaternion_multiply_by_number(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* multiplicand, const double multipier);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_get_ratio(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* divident, const BGC_FP32_Quaternion* divisor);
|
||||
extern inline int bgc_fp64_quaternion_get_ratio(BGC_FP64_Quaternion* quotient, const BGC_FP64_Quaternion* divident, const BGC_FP64_Quaternion* divisor);
|
||||
extern inline int bgc_fp32_quaternion_divide_by_quaternion(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* divident, const BGC_FP32_Quaternion* divisor);
|
||||
extern inline int bgc_fp64_quaternion_divide_by_quaternion(BGC_FP64_Quaternion* quotient, const BGC_FP64_Quaternion* divident, const BGC_FP64_Quaternion* divisor);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_divide(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* dividend, const float divisor);
|
||||
extern inline void bgc_fp64_quaternion_divide(BGC_FP64_Quaternion* quotient, const BGC_FP64_Quaternion* dividend, const double divisor);
|
||||
extern inline void bgc_fp32_quaternion_divide_by_number(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* dividend, const float divisor);
|
||||
extern inline void bgc_fp64_quaternion_divide_by_number(BGC_FP64_Quaternion* quotient, const BGC_FP64_Quaternion* dividend, const double divisor);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_get_mean2(BGC_FP32_Quaternion* mean, const BGC_FP32_Quaternion* quaternion1, const BGC_FP32_Quaternion* quaternion2);
|
||||
extern inline void bgc_fp64_quaternion_get_mean2(BGC_FP64_Quaternion* mean, const BGC_FP64_Quaternion* quaternion1, const BGC_FP64_Quaternion* quaternion2);
|
||||
|
|
@ -88,6 +88,18 @@ extern inline int bgc_fp64_quaternion_normalize(BGC_FP64_Quaternion* quaternion)
|
|||
extern inline int bgc_fp32_quaternion_get_normalized(BGC_FP32_Quaternion* normalized, const BGC_FP32_Quaternion* quaternion);
|
||||
extern inline int bgc_fp64_quaternion_get_normalized(BGC_FP64_Quaternion* normalized, const BGC_FP64_Quaternion* quaternion);
|
||||
|
||||
extern inline void _bgc_fp32_quaternion_turn_vector_roughly(BGC_FP32_Vector3* turned_vector, const BGC_FP32_Quaternion* quaternion, const BGC_FP32_Vector3* original_vector);
|
||||
extern inline void _bgc_fp64_quaternion_turn_vector_roughly(BGC_FP64_Vector3* turned_vector, const BGC_FP64_Quaternion* quaternion, const BGC_FP64_Vector3* original_vector);
|
||||
|
||||
extern inline void _bgc_fp32_quaternion_turn_vector_back_roughly(BGC_FP32_Vector3* turned_vector, const BGC_FP32_Quaternion* quaternion, const BGC_FP32_Vector3* original_vector);
|
||||
extern inline void _bgc_fp64_quaternion_turn_vector_back_roughly(BGC_FP64_Vector3* turned_vector, const BGC_FP64_Quaternion* quaternion, const BGC_FP64_Vector3* original_vector);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_turn_vector(BGC_FP32_Vector3* turned_vector, const BGC_FP32_Quaternion* quaternion, const BGC_FP32_Vector3* original_vector);
|
||||
extern inline int bgc_fp64_quaternion_turn_vector(BGC_FP64_Vector3* turned_vector, const BGC_FP64_Quaternion* quaternion, const BGC_FP64_Vector3* original_vector);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_turn_vector_back(BGC_FP32_Vector3* turned_vector, const BGC_FP32_Quaternion* quaternion, const BGC_FP32_Vector3* original_vector);
|
||||
extern inline int bgc_fp64_quaternion_turn_vector_back(BGC_FP64_Vector3* turned_vector, const BGC_FP64_Quaternion* quaternion, const BGC_FP64_Vector3* original_vector);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_get_rotation_matrix(BGC_FP32_Matrix3x3* rotation, const BGC_FP32_Quaternion* quaternion);
|
||||
extern inline int bgc_fp64_quaternion_get_rotation_matrix(BGC_FP64_Matrix3x3* rotation, const BGC_FP64_Quaternion* quaternion);
|
||||
|
||||
|
|
@ -114,12 +126,12 @@ int bgc_fp32_quaternion_get_exponation(BGC_FP32_Quaternion* power, const BGC_FP3
|
|||
|
||||
// isnan(square_modulus) means checking for NaN value at square_modulus
|
||||
if (isnan(square_modulus)) {
|
||||
return 0;
|
||||
return BGC_FAILED;
|
||||
}
|
||||
|
||||
if (square_vector <= BGC_FP32_SQUARE_EPSILON) {
|
||||
if (base->s0 < 0.0f) {
|
||||
return 0;
|
||||
return BGC_FAILED;
|
||||
}
|
||||
|
||||
power->s0 = powf(base->s0, exponent);
|
||||
|
|
@ -127,7 +139,7 @@ int bgc_fp32_quaternion_get_exponation(BGC_FP32_Quaternion* power, const BGC_FP3
|
|||
power->x2 = 0.0f;
|
||||
power->x3 = 0.0f;
|
||||
|
||||
return 1;
|
||||
return BGC_SUCCESS;
|
||||
}
|
||||
|
||||
const float vector_modulus = sqrtf(square_vector);
|
||||
|
|
@ -140,7 +152,7 @@ int bgc_fp32_quaternion_get_exponation(BGC_FP32_Quaternion* power, const BGC_FP3
|
|||
power->x2 = base->x2 * multiplier;
|
||||
power->x3 = base->x3 * multiplier;
|
||||
|
||||
return 1;
|
||||
return BGC_SUCCESS;
|
||||
}
|
||||
|
||||
int bgc_fp64_quaternion_get_exponation(BGC_FP64_Quaternion* power, const BGC_FP64_Quaternion* base, const double exponent)
|
||||
|
|
@ -155,12 +167,12 @@ int bgc_fp64_quaternion_get_exponation(BGC_FP64_Quaternion* power, const BGC_FP6
|
|||
|
||||
// isnan(square_modulus) means checking for NaN value at square_modulus
|
||||
if (isnan(square_modulus)) {
|
||||
return 0;
|
||||
return BGC_FAILED;
|
||||
}
|
||||
|
||||
if (square_vector <= BGC_FP64_SQUARE_EPSILON) {
|
||||
if (base->s0 < 0.0) {
|
||||
return 0;
|
||||
return BGC_FAILED;
|
||||
}
|
||||
|
||||
power->s0 = pow(base->s0, exponent);
|
||||
|
|
@ -168,7 +180,7 @@ int bgc_fp64_quaternion_get_exponation(BGC_FP64_Quaternion* power, const BGC_FP6
|
|||
power->x2 = 0.0;
|
||||
power->x3 = 0.0;
|
||||
|
||||
return 1;
|
||||
return BGC_SUCCESS;
|
||||
}
|
||||
|
||||
const double vector_modulus = sqrt(square_vector);
|
||||
|
|
@ -181,5 +193,5 @@ int bgc_fp64_quaternion_get_exponation(BGC_FP64_Quaternion* power, const BGC_FP6
|
|||
power->x2 = base->x2 * multiplier;
|
||||
power->x3 = base->x3 * multiplier;
|
||||
|
||||
return 1;
|
||||
return BGC_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue