Добавлены функции модуля для версоров и кватернионо / Functions of modulus have been added for versors and quaternions
This commit is contained in:
parent
bef7ab98f4
commit
03e390c1d0
12 changed files with 246 additions and 211 deletions
|
@ -89,72 +89,96 @@ static inline void bg_fp64_quaternion_copy(const BgFP64Quaternion* from, BgFP64Q
|
|||
|
||||
// ============= Copy to twin type ============== //
|
||||
|
||||
static inline void bg_fp32_quaternion_set_from_fp64(const BgFP64Quaternion* versor, BgFP32Quaternion* result)
|
||||
static inline void bg_fp32_quaternion_set_from_fp64(const BgFP64Quaternion* quaternion, BgFP32Quaternion* result)
|
||||
{
|
||||
result->s0 = (float) versor->s0;
|
||||
result->x1 = (float) versor->x1;
|
||||
result->x2 = (float) versor->x2;
|
||||
result->x3 = (float) versor->x3;
|
||||
result->s0 = (float) quaternion->s0;
|
||||
result->x1 = (float) quaternion->x1;
|
||||
result->x2 = (float) quaternion->x2;
|
||||
result->x3 = (float) quaternion->x3;
|
||||
}
|
||||
|
||||
static inline void bg_fp64_quaternion_set_from_fp32(const BgFP32Quaternion* versor, BgFP64Quaternion* result)
|
||||
static inline void bg_fp64_quaternion_set_from_fp32(const BgFP32Quaternion* quaternion, BgFP64Quaternion* result)
|
||||
{
|
||||
result->s0 = versor->s0;
|
||||
result->x1 = versor->x1;
|
||||
result->x2 = versor->x2;
|
||||
result->x3 = versor->x3;
|
||||
result->s0 = quaternion->s0;
|
||||
result->x1 = quaternion->x1;
|
||||
result->x2 = quaternion->x2;
|
||||
result->x3 = quaternion->x3;
|
||||
}
|
||||
|
||||
// ================= Inversion ================== //
|
||||
|
||||
static inline void bg_fp32_quaternion_conjugate(BgFP32Quaternion* versor)
|
||||
static inline void bg_fp32_quaternion_conjugate(BgFP32Quaternion* quaternion)
|
||||
{
|
||||
versor->x1 = -versor->x1;
|
||||
versor->x2 = -versor->x2;
|
||||
versor->x3 = -versor->x3;
|
||||
quaternion->x1 = -quaternion->x1;
|
||||
quaternion->x2 = -quaternion->x2;
|
||||
quaternion->x3 = -quaternion->x3;
|
||||
}
|
||||
|
||||
static inline void bg_fp64_quaternion_conjugate(BgFP64Quaternion* versor)
|
||||
static inline void bg_fp64_quaternion_conjugate(BgFP64Quaternion* quaternion)
|
||||
{
|
||||
versor->x1 = -versor->x1;
|
||||
versor->x2 = -versor->x2;
|
||||
versor->x3 = -versor->x3;
|
||||
quaternion->x1 = -quaternion->x1;
|
||||
quaternion->x2 = -quaternion->x2;
|
||||
quaternion->x3 = -quaternion->x3;
|
||||
}
|
||||
|
||||
// ================ Set Conjugate =============== //
|
||||
|
||||
static inline void bg_fp32_quaternion_set_conjugate(const BgFP32Quaternion* versor, BgFP32Quaternion* result)
|
||||
static inline void bg_fp32_quaternion_set_conjugate(const BgFP32Quaternion* quaternion, BgFP32Quaternion* result)
|
||||
{
|
||||
result->s0 = versor->s0;
|
||||
result->x1 = -versor->x1;
|
||||
result->x2 = -versor->x2;
|
||||
result->x3 = -versor->x3;
|
||||
result->s0 = quaternion->s0;
|
||||
result->x1 = -quaternion->x1;
|
||||
result->x2 = -quaternion->x2;
|
||||
result->x3 = -quaternion->x3;
|
||||
}
|
||||
|
||||
static inline void bg_fp64_quaternion_set_conjugate(const BgFP64Quaternion* versor, BgFP64Quaternion* result)
|
||||
static inline void bg_fp64_quaternion_set_conjugate(const BgFP64Quaternion* quaternion, BgFP64Quaternion* result)
|
||||
{
|
||||
result->s0 = versor->s0;
|
||||
result->x1 = -versor->x1;
|
||||
result->x2 = -versor->x2;
|
||||
result->x3 = -versor->x3;
|
||||
result->s0 = quaternion->s0;
|
||||
result->x1 = -quaternion->x1;
|
||||
result->x2 = -quaternion->x2;
|
||||
result->x3 = -quaternion->x3;
|
||||
}
|
||||
|
||||
// ================ Get Inverted ================ //
|
||||
// ================ Set Conjugate =============== //
|
||||
|
||||
static inline void bg_fp32_quaternion_set_conjugate_fp64(const BgFP64Quaternion* versor, BgFP32Quaternion* result)
|
||||
static inline void bg_fp32_quaternion_set_conjugate_fp64(const BgFP64Quaternion* quaternion, BgFP32Quaternion* result)
|
||||
{
|
||||
result->s0 = (float) versor->s0;
|
||||
result->x1 = (float) -versor->x1;
|
||||
result->x2 = (float) -versor->x2;
|
||||
result->x3 = (float) -versor->x3;
|
||||
result->s0 = (float) quaternion->s0;
|
||||
result->x1 = (float) -quaternion->x1;
|
||||
result->x2 = (float) -quaternion->x2;
|
||||
result->x3 = (float) -quaternion->x3;
|
||||
}
|
||||
|
||||
static inline void bg_fp64_quaternion_set_conjugate_fp32(const BgFP32Quaternion* versor, BgFP64Quaternion* result)
|
||||
static inline void bg_fp64_quaternion_set_conjugate_fp32(const BgFP32Quaternion* quaternion, BgFP64Quaternion* result)
|
||||
{
|
||||
result->s0 = versor->s0;
|
||||
result->x1 = -versor->x1;
|
||||
result->x2 = -versor->x2;
|
||||
result->x3 = -versor->x3;
|
||||
result->s0 = quaternion->s0;
|
||||
result->x1 = -quaternion->x1;
|
||||
result->x2 = -quaternion->x2;
|
||||
result->x3 = -quaternion->x3;
|
||||
}
|
||||
|
||||
// ============= Get Square Modulus ============= //
|
||||
|
||||
static inline float bg_fp32_quaternion_get_square_modulus(const BgFP32Quaternion* quaternion)
|
||||
{
|
||||
return (quaternion->s0 * quaternion->s0 + quaternion->x1 * quaternion->x1) + (quaternion->x2 * quaternion->x2 + quaternion->x3 * quaternion->x3);
|
||||
}
|
||||
|
||||
static inline double bg_fp64_quaternion_get_square_modulus(const BgFP64Quaternion* quaternion)
|
||||
{
|
||||
return (quaternion->s0 * quaternion->s0 + quaternion->x1 * quaternion->x1) + (quaternion->x2 * quaternion->x2 + quaternion->x3 * quaternion->x3);
|
||||
}
|
||||
|
||||
// ================ Get Modulus ================= //
|
||||
|
||||
static inline float bg_fp32_quaternion_get_modulus(const BgFP32Quaternion* quaternion)
|
||||
{
|
||||
return sqrtf(bg_fp32_quaternion_get_square_modulus(quaternion));
|
||||
}
|
||||
|
||||
static inline double bg_fp64_quaternion_get_modulus(const BgFP64Quaternion* quaternion)
|
||||
{
|
||||
return sqrt(bg_fp64_quaternion_get_square_modulus(quaternion));
|
||||
}
|
||||
|
||||
// ============ Make Rotation Matrix ============ //
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue