Добавление операций проверки состояний кватернионов и дуальных кватернионов, а также операций трансформации вектора с помощью rigid pose
This commit is contained in:
parent
dc759e61f7
commit
405af2f3a7
8 changed files with 152 additions and 32 deletions
|
|
@ -209,7 +209,6 @@ inline void bgc_fp32_position3_transform_point_back(BGC_FP32_Vector3* const tran
|
|||
BGC_FP32_Vector3 relative_point;
|
||||
bgc_fp32_vector3_subtract(&relative_point, initial_point, &position->shift);
|
||||
bgc_fp32_turn3_vector_back(transformed_point, &position->turn, &relative_point);
|
||||
|
||||
}
|
||||
|
||||
inline void bgc_fp64_position3_transform_point_back(BGC_FP64_Vector3* const transformed_point, const BGC_FP64_Position3* const position, const BGC_FP64_Vector3* const initial_point)
|
||||
|
|
@ -217,7 +216,6 @@ inline void bgc_fp64_position3_transform_point_back(BGC_FP64_Vector3* const tran
|
|||
BGC_FP64_Vector3 relative_point;
|
||||
bgc_fp64_vector3_subtract(&relative_point, initial_point, &position->shift);
|
||||
bgc_fp64_turn3_vector_back(transformed_point, &position->turn, &relative_point);
|
||||
|
||||
}
|
||||
|
||||
// ============== Transform Vector =============== //
|
||||
|
|
|
|||
|
|
@ -22,6 +22,12 @@ extern inline int bgc_fp64_quaternion_is_zero(const BGC_FP64_Quaternion* const q
|
|||
extern inline int bgc_fp32_quaternion_is_unit(const BGC_FP32_Quaternion* const quaternion);
|
||||
extern inline int bgc_fp64_quaternion_is_unit(const BGC_FP64_Quaternion* const quaternion);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_is_pure(const BGC_FP32_Quaternion* const quaternion);
|
||||
extern inline int bgc_fp64_quaternion_is_pure(const BGC_FP64_Quaternion* const quaternion);
|
||||
|
||||
extern inline int bgc_fp32_quaternion_is_real(const BGC_FP32_Quaternion* const quaternion);
|
||||
extern inline int bgc_fp64_quaternion_is_real(const BGC_FP64_Quaternion* const quaternion);
|
||||
|
||||
extern inline void bgc_fp32_quaternion_copy(BGC_FP32_Quaternion* const destination, const BGC_FP32_Quaternion* const source);
|
||||
extern inline void bgc_fp64_quaternion_copy(BGC_FP64_Quaternion* const destination, const BGC_FP64_Quaternion* const source);
|
||||
|
||||
|
|
|
|||
|
|
@ -110,6 +110,30 @@ inline int bgc_fp64_quaternion_is_unit(const BGC_FP64_Quaternion* const quaterni
|
|||
return bgc_fp64_is_square_unit(bgc_fp64_quaternion_get_square_magnitude(quaternion));
|
||||
}
|
||||
|
||||
// ================== Is Pure =================== //
|
||||
|
||||
inline int bgc_fp32_quaternion_is_pure(const BGC_FP32_Quaternion* const quaternion)
|
||||
{
|
||||
return bgc_fp32_is_zero(quaternion->s0);
|
||||
}
|
||||
|
||||
inline int bgc_fp64_quaternion_is_pure(const BGC_FP64_Quaternion* const quaternion)
|
||||
{
|
||||
return bgc_fp64_is_zero(quaternion->s0);
|
||||
}
|
||||
|
||||
// ================== Is Real =================== //
|
||||
|
||||
inline int bgc_fp32_quaternion_is_real(const BGC_FP32_Quaternion* const quaternion)
|
||||
{
|
||||
return quaternion->x1 * quaternion->x1 + quaternion->x2 * quaternion->x2 + quaternion->x3 * quaternion->x3 <= BGC_FP32_SQUARE_EPSILON;
|
||||
}
|
||||
|
||||
inline int bgc_fp64_quaternion_is_real(const BGC_FP64_Quaternion* const quaternion)
|
||||
{
|
||||
return quaternion->x1 * quaternion->x1 + quaternion->x2 * quaternion->x2 + quaternion->x3 * quaternion->x3 <= BGC_FP64_SQUARE_EPSILON;
|
||||
}
|
||||
|
||||
// ==================== Copy ==================== //
|
||||
|
||||
inline void bgc_fp32_quaternion_copy(BGC_FP32_Quaternion* const destination, const BGC_FP32_Quaternion* const source)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ extern inline void bgc_fp64_rigid_pose3_copy(BGC_FP64_RigidPose3* const destinat
|
|||
extern inline void bgc_fp32_rigid_pose3_swap(BGC_FP32_RigidPose3* const pose1, BGC_FP32_RigidPose3* const pose2);
|
||||
extern inline void bgc_fp64_rigid_pose3_swap(BGC_FP64_RigidPose3* const pose1, BGC_FP64_RigidPose3* const pose2);
|
||||
|
||||
extern inline int bgc_fp32_rigid_pose3_is_idle(const BGC_FP32_RigidPose3* const pose);
|
||||
extern inline int bgc_fp64_rigid_pose3_is_idle(const BGC_FP64_RigidPose3* const pose);
|
||||
|
||||
extern inline void bgc_fp32_rigid_pose3_convert_to_fp64(BGC_FP64_RigidPose3* const destination, const BGC_FP32_RigidPose3* const source);
|
||||
extern inline void bgc_fp64_rigid_pose3_convert_to_fp32(BGC_FP32_RigidPose3* const destination, const BGC_FP64_RigidPose3* const source);
|
||||
|
||||
|
|
@ -80,3 +83,9 @@ extern inline void bgc_fp64_rigid_pose3_get_reverse_position(BGC_FP64_Position3*
|
|||
|
||||
extern inline void bgc_fp32_rigid_pose3_set_reverse_position(BGC_FP32_RigidPose3* const pose, const BGC_FP32_Position3* const position);
|
||||
extern inline void bgc_fp64_rigid_pose3_set_reverse_position(BGC_FP64_RigidPose3* const pose, const BGC_FP64_Position3* const position);
|
||||
|
||||
extern inline void bgc_fp32_rigid_pose3_transform_vector(BGC_FP32_Vector3* const turned_vector, const BGC_FP32_RigidPose3* const pose, const BGC_FP32_Vector3* const original_vector);
|
||||
extern inline void bgc_fp64_rigid_pose3_transform_vector(BGC_FP64_Vector3* const turned_vector, const BGC_FP64_RigidPose3* const pose, const BGC_FP64_Vector3* const original_vector);
|
||||
|
||||
extern inline void bgc_fp32_rigid_pose3_transform_vector_back(BGC_FP32_Vector3* const turned_vector, const BGC_FP32_RigidPose3* const pose, const BGC_FP32_Vector3* const original_vector);
|
||||
extern inline void bgc_fp64_rigid_pose3_transform_vector_back(BGC_FP64_Vector3* const turned_vector, const BGC_FP64_RigidPose3* const pose, const BGC_FP64_Vector3* const original_vector);
|
||||
|
|
|
|||
|
|
@ -152,6 +152,18 @@ inline void bgc_fp64_rigid_pose3_swap(BGC_FP64_RigidPose3* const pose1, BGC_FP64
|
|||
bgc_fp64_dual_quaternion_swap(&pose1->_versor, &pose2->_versor);
|
||||
}
|
||||
|
||||
// ================== Is Idle =================== //
|
||||
|
||||
inline int bgc_fp32_rigid_pose3_is_idle(const BGC_FP32_RigidPose3* const pose)
|
||||
{
|
||||