Добавлены функции возведения в степень, экспоненты и логарифма для дуальных чисел, добавлены функции магнитуды для дуальных кватернионов
This commit is contained in:
parent
178e004e3f
commit
cfb5fb7378
4 changed files with 121 additions and 0 deletions
|
|
@ -18,6 +18,54 @@ inline void bgc_fp64_dual_quaternion_reset(BGC_FP64_DualQuaternion* const quater
|
|||
bgc_fp64_quaternion_reset(&quaternion->dual_part);
|
||||
}
|
||||
|
||||
// ============== Square Magnitude ============== //
|
||||
|
||||
inline void bgc_fp32_dual_quaternion_get_square_magnitude(BGC_FP32_DualNumber* const square_magnitude, const BGC_FP32_DualQuaternion* const quaternion)
|
||||
{
|
||||
square_magnitude->real_part = bgc_fp32_quaternion_get_square_magnitude(&quaternion->real_part);
|
||||
square_magnitude->dual_part = 2.0f * bgc_fp32_quaternion_get_dot_product(&quaternion->real_part, &quaternion->dual_part);
|
||||
}
|
||||
|
||||
inline void bgc_fp64_dual_quaternion_get_square_magnitude(BGC_FP64_DualNumber* const square_magnitude, const BGC_FP64_DualQuaternion* const quaternion)
|
||||
{
|
||||
square_magnitude->real_part = bgc_fp64_quaternion_get_square_magnitude(&quaternion->real_part);
|
||||
square_magnitude->dual_part = 2.0 * bgc_fp64_quaternion_get_dot_product(&quaternion->real_part, &quaternion->dual_part);
|
||||
}
|
||||
|
||||
// ================= Magnitude ================== //
|
||||
|
||||
inline void bgc_fp32_dual_quaternion_get_magnitude(BGC_FP32_DualNumber* const magnitude, const BGC_FP32_DualQuaternion* const quaternion)
|
||||
{
|
||||
const float square_real_part = bgc_fp32_quaternion_get_square_magnitude(&quaternion->real_part);
|
||||
|
||||
if (square_real_part <= BGC_FP32_SQUARE_EPSILON) {
|
||||
magnitude->real_part = 0.0f;
|
||||
magnitude->dual_part = 0.0f;
|
||||
return;
|
||||
}
|
||||
|
||||
const float real_part = sqrtf(square_real_part);
|
||||
|
||||
magnitude->real_part = real_part;
|
||||
magnitude->dual_part = bgc_fp32_quaternion_get_dot_product(&quaternion->real_part, &quaternion->dual_part) / real_part;
|
||||
}
|
||||
|
||||
inline void bgc_fp64_dual_quaternion_get_magnitude(BGC_FP64_DualNumber* const magnitude, const BGC_FP64_DualQuaternion* const quaternion)
|
||||
{
|
||||
const double square_real_part = bgc_fp64_quaternion_get_square_magnitude(&quaternion->real_part);
|
||||
|
||||
if (square_real_part <= BGC_FP64_SQUARE_EPSILON) {
|
||||
magnitude->real_part = 0.0;
|
||||
magnitude->dual_part = 0.0;
|
||||
return;
|
||||
}
|
||||
|
||||
const double real_part = sqrt(square_real_part);
|
||||
|
||||
magnitude->real_part = real_part;
|
||||
magnitude->dual_part = bgc_fp64_quaternion_get_dot_product(&quaternion->real_part, &quaternion->dual_part) / real_part;
|
||||
}
|
||||
|
||||
// ==================== Copy ==================== //
|
||||
|
||||
inline void bgc_fp32_dual_quaternion_copy(BGC_FP32_DualQuaternion* const destination, const BGC_FP32_DualQuaternion* const source)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue