Добавлено умножение дуальных кватернионов с прочими сущностями
This commit is contained in:
parent
b621191698
commit
a8a22cdcc1
4 changed files with 105 additions and 10 deletions
|
|
@ -31,16 +31,25 @@ extern inline void bgc_fp32_dual_quaternion_subtract_scaled(BGC_FP32_DualQuatern
|
||||||
extern inline void bgc_fp64_dual_quaternion_subtract_scaled(BGC_FP64_DualQuaternion* difference, const BGC_FP64_DualQuaternion* base_quaternion, const BGC_FP64_DualQuaternion* scalable_quaternion, const double scale);
|
extern inline void bgc_fp64_dual_quaternion_subtract_scaled(BGC_FP64_DualQuaternion* difference, const BGC_FP64_DualQuaternion* base_quaternion, const BGC_FP64_DualQuaternion* scalable_quaternion, const double scale);
|
||||||
|
|
||||||
extern inline void bgc_fp32_dual_quaternion_multiply_by_real_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const float multiplier);
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_real_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const float multiplier);
|
||||||
extern inline void bgc_fp64_dual_quaternion_multiply_by_real(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const double multiplier);
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_real_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const double multiplier);
|
||||||
|
|
||||||
extern inline void bgc_fp32_dual_quaternion_multiply_by_dual_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_DualNumber* multiplier);
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_dual_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_DualNumber* multiplier);
|
||||||
extern inline void bgc_fp64_dual_quaternion_multiply_by_dual_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_DualNumber* multiplier);
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_dual_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_DualNumber* multiplier);
|
||||||
|
|
||||||
extern inline void bgc_fp32_dual_quaternion_multiply_by_conjugate_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_DualNumber* multiplier_to_conjugate);
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_conjugate_dual_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_DualNumber* multiplier_to_conjugate);
|
||||||
extern inline void bgc_fp64_dual_quaternion_multiply_by_conjugate_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_DualNumber* multiplier_to_conjugate);
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_conjugate_dual_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_DualNumber* multiplier_to_conjugate);
|
||||||
|
|
||||||
extern inline int bgc_fp32_dual_quaternion_divide_by_real(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* divident, const float divisor);
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_Quaternion* multiplier);
|
||||||
extern inline int bgc_fp64_dual_quaternion_divide_by_real(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* divident, const double divisor);
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_Quaternion* multiplier);
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_conjugate_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_Quaternion* multiplier_to_conjugate);
|
||||||
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_conjugate_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_Quaternion* multiplier_to_conjugate);
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_dual_quaternion_multiply_by_dual_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* left, const BGC_FP32_DualQuaternion* right);
|
||||||
|
extern inline void bgc_fp64_dual_quaternion_multiply_by_dual_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* left, const BGC_FP64_DualQuaternion* right);
|
||||||
|
|
||||||
|
extern inline int bgc_fp32_dual_quaternion_divide_by_real_number(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* divident, const float divisor);
|
||||||
|
extern inline int bgc_fp64_dual_quaternion_divide_by_real_number(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* divident, const double divisor);
|
||||||
|
|
||||||
extern inline int bgc_fp32_dual_quaternion_divide_by_dual_number(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* dividend, const BGC_FP32_DualNumber* divisor);
|
extern inline int bgc_fp32_dual_quaternion_divide_by_dual_number(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* dividend, const BGC_FP32_DualNumber* divisor);
|
||||||
extern inline int bgc_fp64_dual_quaternion_divide_by_dual_number(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* dividend, const BGC_FP64_DualNumber* divisor);
|
extern inline int bgc_fp64_dual_quaternion_divide_by_dual_number(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* dividend, const BGC_FP64_DualNumber* divisor);
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ inline void bgc_fp32_dual_quaternion_multiply_by_real_number(BGC_FP32_DualQuater
|
||||||
bgc_fp32_quaternion_multiply_by_real(&product->dual_part, &multiplicand->dual_part, multiplier);
|
bgc_fp32_quaternion_multiply_by_real(&product->dual_part, &multiplicand->dual_part, multiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void bgc_fp64_dual_quaternion_multiply_by_real(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const double multiplier)
|
inline void bgc_fp64_dual_quaternion_multiply_by_real_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const double multiplier)
|
||||||
{
|
{
|
||||||
bgc_fp64_quaternion_multiply_by_real(&product->real_part, &multiplicand->real_part, multiplier);
|
bgc_fp64_quaternion_multiply_by_real(&product->real_part, &multiplicand->real_part, multiplier);
|
||||||
bgc_fp64_quaternion_multiply_by_real(&product->dual_part, &multiplicand->dual_part, multiplier);
|
bgc_fp64_quaternion_multiply_by_real(&product->dual_part, &multiplicand->dual_part, multiplier);
|
||||||
|
|
@ -206,9 +206,61 @@ inline void bgc_fp64_dual_quaternion_multiply_by_conjugate_number(BGC_FP64_DualQ
|
||||||
bgc_fp64_quaternion_copy(&product->dual_part, &dual_part);
|
bgc_fp64_quaternion_copy(&product->dual_part, &dual_part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ====== Multiply by (Regular) Quaternion ====== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_quaternion_multiply_by_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_Quaternion* multiplier)
|
||||||
|
{
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&product->real_part, &multiplicand->real_part, multiplier);
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&product->dual_part, &multiplicand->dual_part, multiplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_quaternion_multiply_by_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_Quaternion* multiplier)
|
||||||
|
{
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&product->real_part, &multiplicand->real_part, multiplier);
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&product->dual_part, &multiplicand->dual_part, multiplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====== Multiply by Conjugate Quaternion ====== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_quaternion_multiply_by_conjugate_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* multiplicand, const BGC_FP32_Quaternion* multiplier_to_conjugate)
|
||||||
|
{
|
||||||
|
bgc_fp32_quaternion_multiply_by_conjugate(&product->real_part, &multiplicand->real_part, multiplier_to_conjugate);
|
||||||
|
bgc_fp32_quaternion_multiply_by_conjugate(&product->dual_part, &multiplicand->dual_part, multiplier_to_conjugate);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_quaternion_multiply_by_conjugate_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* multiplicand, const BGC_FP64_Quaternion* multiplier_to_conjugate)
|
||||||
|
{
|
||||||
|
bgc_fp64_quaternion_multiply_by_conjugate(&product->real_part, &multiplicand->real_part, multiplier_to_conjugate);
|
||||||
|
bgc_fp64_quaternion_multiply_by_conjugate(&product->dual_part, &multiplicand->dual_part, multiplier_to_conjugate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ======== Multiply by Dual Quaternion ========= //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_quaternion_multiply_by_dual_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_DualQuaternion* left, const BGC_FP32_DualQuaternion* right)
|
||||||
|
{
|
||||||
|
BGC_FP32_Quaternion dual_part1, dual_part2;
|
||||||
|
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&dual_part1, &left->real_part, &right->dual_part);
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&dual_part2, &left->dual_part, &right->real_part);
|
||||||
|
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&product->real_part, &left->real_part, &right->real_part);
|
||||||
|
bgc_fp32_quaternion_add(&product->dual_part, &dual_part1, &dual_part2);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_quaternion_multiply_by_dual_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_DualQuaternion* left, const BGC_FP64_DualQuaternion* right)
|
||||||
|
{
|
||||||
|
BGC_FP64_Quaternion dual_part1, dual_part2;
|
||||||
|
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&dual_part1, &left->real_part, &right->dual_part);
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&dual_part2, &left->dual_part, &right->real_part);
|
||||||
|
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&product->real_part, &left->real_part, &right->real_part);
|
||||||
|
bgc_fp64_quaternion_add(&product->dual_part, &dual_part1, &dual_part2);
|
||||||
|
}
|
||||||
|
|
||||||
// =================== Divide =================== //
|
// =================== Divide =================== //
|
||||||
|
|
||||||
inline int bgc_fp32_dual_quaternion_divide_by_real(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* dividend, const float divisor)
|
inline int bgc_fp32_dual_quaternion_divide_by_real_number(BGC_FP32_DualQuaternion* quotient, const BGC_FP32_DualQuaternion* dividend, const float divisor)
|
||||||
{
|
{
|
||||||
if (bgc_fp32_is_zero(divisor)) {
|
if (bgc_fp32_is_zero(divisor)) {
|
||||||
return BGC_FAILURE;
|
return BGC_FAILURE;
|
||||||
|
|
@ -222,7 +274,7 @@ inline int bgc_fp32_dual_quaternion_divide_by_real(BGC_FP32_DualQuaternion* quot
|
||||||
return BGC_SUCCESS;
|
return BGC_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int bgc_fp64_dual_quaternion_divide_by_real(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* dividend, const double divisor)
|
inline int bgc_fp64_dual_quaternion_divide_by_real_number(BGC_FP64_DualQuaternion* quotient, const BGC_FP64_DualQuaternion* dividend, const double divisor)
|
||||||
{
|
{
|
||||||
if (bgc_fp64_is_zero(divisor)) {
|
if (bgc_fp64_is_zero(divisor)) {
|
||||||
return BGC_FAILURE;
|
return BGC_FAILURE;
|
||||||
|
|
@ -261,7 +313,7 @@ inline int bgc_fp64_dual_quaternion_divide_by_dual_number(BGC_FP64_DualQuaternio
|
||||||
}
|
}
|
||||||
|
|
||||||
bgc_fp64_dual_quaternion_multiply_by_conjugate_number(quotient, dividend, divisor);
|
bgc_fp64_dual_quaternion_multiply_by_conjugate_number(quotient, dividend, divisor);
|
||||||
bgc_fp64_dual_quaternion_multiply_by_real(quotient, quotient, 1.0 / square_modulus);
|
bgc_fp64_dual_quaternion_multiply_by_real_number(quotient, quotient, 1.0 / square_modulus);
|
||||||
|
|
||||||
return BGC_SUCCESS;
|
return BGC_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -291,7 +343,7 @@ inline int bgc_fp64_dual_quaternion_divide_by_conjugate_number(BGC_FP64_DualQuat
|
||||||
}
|
}
|
||||||
|
|
||||||
bgc_fp64_dual_quaternion_multiply_by_dual_number(quotient, dividend, divisor_to_conjugate);
|
bgc_fp64_dual_quaternion_multiply_by_dual_number(quotient, dividend, divisor_to_conjugate);
|
||||||
bgc_fp64_dual_quaternion_multiply_by_real(quotient, quotient, 1.0 / square_modulus);
|
bgc_fp64_dual_quaternion_multiply_by_real_number(quotient, quotient, 1.0 / square_modulus);
|
||||||
|
|
||||||
return BGC_SUCCESS;
|
return BGC_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,12 @@ extern inline void bgc_fp64_quaternion_multiply_by_real(BGC_FP64_Quaternion* pro
|
||||||
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_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_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_multiply_by_dual_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_Quaternion* multiplicand, const BGC_FP32_DualNumber* multiplier);
|
||||||
|
extern inline void bgc_fp64_quaternion_multiply_by_dual_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_Quaternion* multiplicand, const BGC_FP64_DualNumber* multiplier);
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_quaternion_multiply_by_dual_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_DualQuaternion* right);
|
||||||
|
extern inline void bgc_fp64_quaternion_multiply_by_dual_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_DualQuaternion* 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_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_fp64_quaternion_multiply_by_conjugate(BGC_FP64_Quaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_Quaternion* right);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -330,6 +330,34 @@ inline void bgc_fp64_quaternion_multiply_by_conjugate(BGC_FP64_Quaternion* produ
|
||||||
product->x3 = x3;
|
product->x3 = x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ========== Multiply By Dual Number =========== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_quaternion_multiply_by_dual_number(BGC_FP32_DualQuaternion* product, const BGC_FP32_Quaternion* multiplicand, const BGC_FP32_DualNumber* multiplier)
|
||||||
|
{
|
||||||
|
bgc_fp32_quaternion_multiply_by_real(&product->real_part, multiplicand, multiplier->real_part);
|
||||||
|
bgc_fp32_quaternion_multiply_by_real(&product->dual_part, multiplicand, multiplier->dual_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_quaternion_multiply_by_dual_number(BGC_FP64_DualQuaternion* product, const BGC_FP64_Quaternion* multiplicand, const BGC_FP64_DualNumber* multiplier)
|
||||||
|
{
|
||||||
|
bgc_fp64_quaternion_multiply_by_real(&product->real_part, multiplicand, multiplier->real_part);
|
||||||
|
bgc_fp64_quaternion_multiply_by_real(&product->dual_part, multiplicand, multiplier->dual_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ======== Multiply By Dual Quaternion ========= //
|
||||||
|
|
||||||
|
inline void bgc_fp32_quaternion_multiply_by_dual_quaternion(BGC_FP32_DualQuaternion* product, const BGC_FP32_Quaternion* left, const BGC_FP32_DualQuaternion* right)
|
||||||
|
{
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&product->real_part, left, &right->real_part);
|
||||||
|
bgc_fp32_quaternion_multiply_by_quaternion(&product->dual_part, left, &right->dual_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_quaternion_multiply_by_dual_quaternion(BGC_FP64_DualQuaternion* product, const BGC_FP64_Quaternion* left, const BGC_FP64_DualQuaternion* right)
|
||||||
|
{
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&product->real_part, left, &right->real_part);
|
||||||
|
bgc_fp64_quaternion_multiply_by_quaternion(&product->dual_part, left, &right->dual_part);
|
||||||
|
}
|
||||||
|
|
||||||
// ============== Divide By Number ============== //
|
// ============== Divide By Number ============== //
|
||||||
|
|
||||||
inline int bgc_fp32_quaternion_divide_by_real(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* dividend, const float divisor)
|
inline int bgc_fp32_quaternion_divide_by_real(BGC_FP32_Quaternion* quotient, const BGC_FP32_Quaternion* dividend, const float divisor)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue