Добавление дуальных чисел, дуальных векторов (3D) и дуальных версоров
This commit is contained in:
parent
043cc72c81
commit
3f96b661a9
8 changed files with 440 additions and 0 deletions
|
|
@ -25,6 +25,10 @@
|
||||||
<ClInclude Include="basic-geometry.h" />
|
<ClInclude Include="basic-geometry.h" />
|
||||||
<ClInclude Include="complex.h" />
|
<ClInclude Include="complex.h" />
|
||||||
<ClInclude Include="cotes-number.h" />
|
<ClInclude Include="cotes-number.h" />
|
||||||
|
<ClInclude Include="dual-number.h" />
|
||||||
|
<ClInclude Include="dual-vector3.h" />
|
||||||
|
<ClInclude Include="dual-versor.h" />
|
||||||
|
<ClInclude Include="hg-vector3.h" />
|
||||||
<ClInclude Include="matrix2x2.h" />
|
<ClInclude Include="matrix2x2.h" />
|
||||||
<ClInclude Include="matrix2x3.h" />
|
<ClInclude Include="matrix2x3.h" />
|
||||||
<ClInclude Include="matrix3x2.h" />
|
<ClInclude Include="matrix3x2.h" />
|
||||||
|
|
@ -47,6 +51,10 @@
|
||||||
<ClCompile Include="angle.c" />
|
<ClCompile Include="angle.c" />
|
||||||
<ClInclude Include="complex.c" />
|
<ClInclude Include="complex.c" />
|
||||||
<ClInclude Include="cotes-number.c" />
|
<ClInclude Include="cotes-number.c" />
|
||||||
|
<ClCompile Include="dual-number.c" />
|
||||||
|
<ClCompile Include="dual-vector3.c" />
|
||||||
|
<ClCompile Include="dual-versor.c" />
|
||||||
|
<ClCompile Include="hg-vector3.c" />
|
||||||
<ClCompile Include="position2.c" />
|
<ClCompile Include="position2.c" />
|
||||||
<ClCompile Include="position3.c" />
|
<ClCompile Include="position3.c" />
|
||||||
<ClCompile Include="utilities.c" />
|
<ClCompile Include="utilities.c" />
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,18 @@
|
||||||
<ClInclude Include="position3.h">
|
<ClInclude Include="position3.h">
|
||||||
<Filter>Файлы заголовков</Filter>
|
<Filter>Файлы заголовков</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="hg-vector3.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="dual-number.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="dual-versor.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="dual-vector3.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="angle.c">
|
<ClCompile Include="angle.c">
|
||||||
|
|
@ -137,5 +149,17 @@
|
||||||
<ClCompile Include="position3.c">
|
<ClCompile Include="position3.c">
|
||||||
<Filter>Исходные файлы</Filter>
|
<Filter>Исходные файлы</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="hg-vector3.c">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="dual-versor.c">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="dual-number.c">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="dual-vector3.c">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
13
basic-geometry/dual-number.c
Normal file
13
basic-geometry/dual-number.c
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#include "dual-number.h"
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_reset(BGC_FP32_DualNumber* number);
|
||||||
|
inline void bgc_fp64_dual_number_reset(BGC_FP64_DualNumber* number);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_make(BGC_FP32_DualNumber* number, const float real, const float dual);
|
||||||
|
inline void bgc_fp64_dual_number_make(BGC_FP64_DualNumber* number, const double real, const double dual);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_copy(BGC_FP32_DualNumber* destination, const BGC_FP32_DualNumber* source);
|
||||||
|
inline void bgc_fp64_dual_number_copy(BGC_FP64_DualNumber* destination, const BGC_FP64_DualNumber* source);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_swap(BGC_FP32_DualNumber* first, BGC_FP32_DualNumber* second);
|
||||||
|
inline void bgc_fp64_dual_number_swap(BGC_FP64_DualNumber* first, BGC_FP64_DualNumber* second);
|
||||||
70
basic-geometry/dual-number.h
Normal file
70
basic-geometry/dual-number.h
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
#ifndef _BGC_DUAL_NUMBER_H_
|
||||||
|
#define _BGC_DUAL_NUMBER_H_
|
||||||
|
|
||||||
|
// =================== Types ==================== //
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
float real, dual;
|
||||||
|
} BGC_FP32_DualNumber;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
double real, dual;
|
||||||
|
} BGC_FP64_DualNumber;
|
||||||
|
|
||||||
|
// =================== Reset ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_reset(BGC_FP32_DualNumber* number)
|
||||||
|
{
|
||||||
|
number->real = 0.0f;
|
||||||
|
number->dual = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_number_reset(BGC_FP64_DualNumber* number)
|
||||||
|
{
|
||||||
|
number->real = 0.0;
|
||||||
|
number->dual = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Make ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_make(BGC_FP32_DualNumber* number, const float real, const float dual)
|
||||||
|
{
|
||||||
|
number->real = real;
|
||||||
|
number->dual = dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_number_make(BGC_FP64_DualNumber* number, const double real, const double dual)
|
||||||
|
{
|
||||||
|
number->real = real;
|
||||||
|
number->dual = dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Copy ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_copy(BGC_FP32_DualNumber* destination, const BGC_FP32_DualNumber* source)
|
||||||
|
{
|
||||||
|
destination->real = source->real;
|
||||||
|
destination->dual = source->dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_number_copy(BGC_FP64_DualNumber* destination, const BGC_FP64_DualNumber* source)
|
||||||
|
{
|
||||||
|
destination->real = source->real;
|
||||||
|
destination->dual = source->dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Swap ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_number_swap(BGC_FP32_DualNumber* first, BGC_FP32_DualNumber* second)
|
||||||
|
{
|
||||||
|
first->real = second->real;
|
||||||
|
first->dual = second->dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_number_swap(BGC_FP64_DualNumber* first, BGC_FP64_DualNumber* second)
|
||||||
|
{
|
||||||
|
first->real = second->real;
|
||||||
|
first->dual = second->dual;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
22
basic-geometry/dual-vector3.c
Normal file
22
basic-geometry/dual-vector3.c
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include "./dual-vector3.h"
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_reset(BGC_FP32_DualVector3* vector);
|
||||||
|
inline void bgc_fp64_dual_vector3_reset(BGC_FP64_DualVector3* vector);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_make(BGC_FP32_DualVector3* vector, const BGC_FP32_Vector3* real, const BGC_FP32_Vector3* dual);
|
||||||
|
inline void bgc_fp64_dual_vector3_make(BGC_FP64_DualVector3* vector, const BGC_FP64_Vector3* real, const BGC_FP64_Vector3* dual);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_set_real_values(BGC_FP32_DualVector3* vector, const float x1, const float x2, const float x3);
|
||||||
|
inline void bgc_fp64_dual_vector3_set_real_values(BGC_FP64_DualVector3* vector, const double x1, const double x2, const double x3);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_set_dual_values(BGC_FP32_DualVector3* vector, const float x1, const float x2, const float x3);
|
||||||
|
inline void bgc_fp64_dual_vector3_set_dual_values(BGC_FP64_DualVector3* vector, const double x1, const double x2, const double x3);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_add(BGC_FP32_DualVector3* sum, const BGC_FP32_DualVector3* first, const BGC_FP32_DualVector3* second);
|
||||||
|
inline void bgc_fp64_dual_vector3_add(BGC_FP64_DualVector3* sum, const BGC_FP64_DualVector3* first, const BGC_FP64_DualVector3* second);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_add_scaled(BGC_FP32_DualVector3* sum, const BGC_FP32_DualVector3* base_vector, const BGC_FP32_DualVector3* scalable_vector, const float scale);
|
||||||
|
inline void bgc_fp64_dual_vector3_add_scaled(BGC_FP64_DualVector3* sum, const BGC_FP64_DualVector3* base_vector, const BGC_FP64_DualVector3* scalable_vector, const double scale);
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_subtract(BGC_FP32_DualVector3* difference, const BGC_FP32_DualVector3* minuend, const BGC_FP32_DualVector3* subtrahend);
|
||||||
|
inline void bgc_fp64_dual_vector3_subtract(BGC_FP64_DualVector3* difference, const BGC_FP64_DualVector3* minuend, const BGC_FP64_DualVector3* subtrahend);
|
||||||
146
basic-geometry/dual-vector3.h
Normal file
146
basic-geometry/dual-vector3.h
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
#ifndef _BGC_DUAL_VECTOR3_H_INCLUDE_
|
||||||
|
#define _BGC_DUAL_VECTOR3_H_INCLUDE_
|
||||||
|
|
||||||
|
#include "./vector3.h"
|
||||||
|
|
||||||
|
// =================== Types ==================== //
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BGC_FP32_Vector3 real, dual;
|
||||||
|
} BGC_FP32_DualVector3;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BGC_FP64_Vector3 real, dual;
|
||||||
|
} BGC_FP64_DualVector3;
|
||||||
|
|
||||||
|
// =================== Reset ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_reset(BGC_FP32_DualVector3* vector)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_reset(&vector->real);
|
||||||
|
bgc_fp32_vector3_reset(&vector->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_reset(BGC_FP64_DualVector3* vector)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_reset(&vector->real);
|
||||||
|
bgc_fp64_vector3_reset(&vector->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Make ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_make(BGC_FP32_DualVector3* vector, const BGC_FP32_Vector3* real, const BGC_FP32_Vector3* dual)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_copy(&vector->real, real);
|
||||||
|
bgc_fp32_vector3_copy(&vector->dual, dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_make(BGC_FP64_DualVector3* vector, const BGC_FP64_Vector3* real, const BGC_FP64_Vector3* dual)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_copy(&vector->real, real);
|
||||||
|
bgc_fp64_vector3_copy(&vector->dual, dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================== Set Real ================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_set_real_values(BGC_FP32_DualVector3* vector, const float x1, const float x2, const float x3)
|
||||||
|
{
|
||||||
|
vector->real.x1 = x1;
|
||||||
|
vector->real.x2 = x2;
|
||||||
|
vector->real.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_set_real_values(BGC_FP64_DualVector3* vector, const double x1, const double x2, const double x3)
|
||||||
|
{
|
||||||
|
vector->real.x1 = x1;
|
||||||
|
vector->real.x2 = x2;
|
||||||
|
vector->real.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================== Set Dual ================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_set_dual_values(BGC_FP32_DualVector3* vector, const float x1, const float x2, const float x3)
|
||||||
|
{
|
||||||
|
vector->dual.x1 = x1;
|
||||||
|
vector->dual.x2 = x2;
|
||||||
|
vector->dual.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_set_dual_values(BGC_FP64_DualVector3* vector, const double x1, const double x2, const double x3)
|
||||||
|
{
|
||||||
|
vector->dual.x1 = x1;
|
||||||
|
vector->dual.x2 = x2;
|
||||||
|
vector->dual.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Add ===================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_add(BGC_FP32_DualVector3* sum, const BGC_FP32_DualVector3* first, const BGC_FP32_DualVector3* second)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_add(&sum->real, &first->real, &second->real);
|
||||||
|
bgc_fp32_vector3_add(&sum->dual, &first->dual, &second->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_add(BGC_FP64_DualVector3* sum, const BGC_FP64_DualVector3* first, const BGC_FP64_DualVector3* second)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_add(&sum->real, &first->real, &second->real);
|
||||||
|
bgc_fp64_vector3_add(&sum->dual, &first->dual, &second->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================= Add Scaled ================= //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_add_scaled(BGC_FP32_DualVector3* sum, const BGC_FP32_DualVector3* base_vector, const BGC_FP32_DualVector3* scalable_vector, const float scale)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_add_scaled(&sum->real, &base_vector->real, &scalable_vector->real, scale);
|
||||||
|
bgc_fp32_vector3_add_scaled(&sum->dual, &base_vector->dual, &scalable_vector->dual, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_add_scaled(BGC_FP64_DualVector3* sum, const BGC_FP64_DualVector3* base_vector, const BGC_FP64_DualVector3* scalable_vector, const double scale)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_add_scaled(&sum->real, &base_vector->real, &scalable_vector->real, scale);
|
||||||
|
bgc_fp64_vector3_add_scaled(&sum->dual, &base_vector->dual, &scalable_vector->dual, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================== Subtract ================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_subtract(BGC_FP32_DualVector3* difference, const BGC_FP32_DualVector3* minuend, const BGC_FP32_DualVector3* subtrahend)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_subtract(&difference->real, &minuend->real, &subtrahend->real);
|
||||||
|
bgc_fp32_vector3_subtract(&difference->dual, &minuend->dual, &subtrahend->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_subtract(BGC_FP64_DualVector3* difference, const BGC_FP64_DualVector3* minuend, const BGC_FP64_DualVector3* subtrahend)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_subtract(&difference->real, &minuend->real, &subtrahend->real);
|
||||||
|
bgc_fp64_vector3_subtract(&difference->dual, &minuend->dual, &subtrahend->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================== Average2 ================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_get_mean2(BGC_FP32_DualVector3* mean, const BGC_FP32_DualVector3* vector1, const BGC_FP32_DualVector3* vector2)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_get_mean2(&mean->real, &vector1->real, &vector2->real);
|
||||||
|
bgc_fp32_vector3_get_mean2(&mean->dual, &vector1->dual, &vector2->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_get_mean2(BGC_FP64_DualVector3* mean, const BGC_FP64_DualVector3* vector1, const BGC_FP64_DualVector3* vector2)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_get_mean2(&mean->real, &vector1->real, &vector2->real);
|
||||||
|
bgc_fp64_vector3_get_mean2(&mean->dual, &vector1->dual, &vector2->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ================== Average3 ================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_vector3_get_mean3(BGC_FP32_DualVector3* mean, const BGC_FP32_DualVector3* vector1, const BGC_FP32_DualVector3* vector2, const BGC_FP32_DualVector3* vector3)
|
||||||
|
{
|
||||||
|
bgc_fp32_vector3_get_mean2(&mean->real, &vector1->real, &vector2->real, &vector3->real);
|
||||||
|
bgc_fp32_vector3_get_mean2(&mean->dual, &vector1->dual, &vector2->dual, &vector3->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_vector3_get_mean3(BGC_FP64_DualVector3* mean, const BGC_FP64_DualVector3* vector1, const BGC_FP64_DualVector3* vector2, const BGC_FP64_DualVector3* vector3)
|
||||||
|
{
|
||||||
|
bgc_fp64_vector3_get_mean2(&mean->real, &vector1->real, &vector2->real, &vector3->real);
|
||||||
|
bgc_fp64_vector3_get_mean2(&mean->dual, &vector1->dual, &vector2->dual, &vector3->dual);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
10
basic-geometry/dual-versor.c
Normal file
10
basic-geometry/dual-versor.c
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#include "dual-versor.h"
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_dual_versor_reset(BGC_FP32_DualVersor* number);
|
||||||
|
extern inline void bgc_fp64_dual_versor_reset(BGC_FP64_DualVersor* number);
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_dual_versor_copy(BGC_FP32_DualVersor* destination, const BGC_FP32_DualVersor* source);
|
||||||
|
extern inline void bgc_fp64_dual_versor_copy(BGC_FP64_DualVersor* destination, const BGC_FP64_DualVersor* source);
|
||||||
|
|
||||||
|
extern inline void bgc_fp32_dual_versor_swap(BGC_FP32_DualVersor* first, BGC_FP32_DualVersor* second);
|
||||||
|
extern inline void bgc_fp64_dual_versor_swap(BGC_FP64_DualVersor* first, BGC_FP64_DualVersor* second);
|
||||||
147
basic-geometry/dual-versor.h
Normal file
147
basic-geometry/dual-versor.h
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
#ifndef _BGC_DUAL_VERSOR_H_
|
||||||
|
#define _BGC_DUAL_VERSOR_H_
|
||||||
|
|
||||||
|
// =================== Types ==================== //
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
struct {
|
||||||
|
float s0, x1, x2, x3;
|
||||||
|
} _real, _dual;
|
||||||
|
} BGC_FP32_DualVersor;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
struct {
|
||||||
|
double s0, x1, x2, x3;
|
||||||
|
} _real, _dual;
|
||||||
|
} BGC_FP64_DualVersor;
|
||||||
|
|
||||||
|
// =================== Reset ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_versor_reset(BGC_FP32_DualVersor* number)
|
||||||
|
{
|
||||||
|
number->_real.s0 = 1.0f;
|
||||||
|
number->_real.x1 = 0.0f;
|
||||||
|
number->_real.x2 = 0.0f;
|
||||||
|
number->_real.x3 = 0.0f;
|
||||||
|
|
||||||
|
number->_dual.s0 = 0.0f;
|
||||||
|
number->_dual.x1 = 0.0f;
|
||||||
|
number->_dual.x2 = 0.0f;
|
||||||
|
number->_dual.x3 = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_versor_reset(BGC_FP64_DualVersor* number)
|
||||||
|
{
|
||||||
|
number->_real.s0 = 1.0f;
|
||||||
|
number->_real.x1 = 0.0f;
|
||||||
|
number->_real.x2 = 0.0f;
|
||||||
|
number->_real.x3 = 0.0f;
|
||||||
|
|
||||||
|
number->_dual.s0 = 0.0f;
|
||||||
|
number->_dual.x1 = 0.0f;
|
||||||
|
number->_dual.x2 = 0.0f;
|
||||||
|
number->_dual.x3 = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Copy ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_versor_copy(BGC_FP32_DualVersor* destination, const BGC_FP32_DualVersor* source)
|
||||||
|
{
|
||||||
|
destination->_real.s0 = source->_real.s0;
|
||||||
|
destination->_real.x1 = source->_real.x1;
|
||||||
|
destination->_real.x2 = source->_real.x2;
|
||||||
|
destination->_real.x3 = source->_real.x3;
|
||||||
|
|
||||||
|
destination->_dual.s0 = source->_dual.s0;
|
||||||
|
destination->_dual.x1 = source->_dual.x1;
|
||||||
|
destination->_dual.x2 = source->_dual.x2;
|
||||||
|
destination->_dual.x3 = source->_dual.x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_versor_copy(BGC_FP64_DualVersor* destination, const BGC_FP64_DualVersor* source)
|
||||||
|
{
|
||||||
|
destination->_real.s0 = source->_real.s0;
|
||||||
|
destination->_real.x1 = source->_real.x1;
|
||||||
|
destination->_real.x2 = source->_real.x2;
|
||||||
|
destination->_real.x3 = source->_real.x3;
|
||||||
|
|
||||||
|
destination->_dual.s0 = source->_dual.s0;
|
||||||
|
destination->_dual.x1 = source->_dual.x1;
|
||||||
|
destination->_dual.x2 = source->_dual.x2;
|
||||||
|
destination->_dual.x3 = source->_dual.x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== Swap ==================== //
|
||||||
|
|
||||||
|
inline void bgc_fp32_dual_versor_swap(BGC_FP32_DualVersor* first, BGC_FP32_DualVersor* second)
|
||||||
|
{
|
||||||
|
// Real
|
||||||
|
float s0 = second->_real.s0;
|
||||||
|
float x1 = second->_real.x1;
|
||||||
|
float x2 = second->_real.x2;
|
||||||
|
float x3 = second->_real.x3;
|
||||||
|
|
||||||
|
second->_real.s0 = first->_real.s0;
|
||||||
|
second->_real.x1 = first->_real.x1;
|
||||||
|
second->_real.x2 = first->_real.x2;
|
||||||
|
second->_real.x3 = first->_real.x3;
|
||||||
|
|
||||||
|
first->_real.s0 = s0;
|
||||||
|
first->_real.x1 = x1;
|
||||||
|
first->_real.x2 = x2;
|
||||||
|
first->_real.x3 = x3;
|
||||||
|
|
||||||
|
// Dual
|
||||||
|
s0 = second->_dual.s0;
|
||||||
|
x1 = second->_dual.x1;
|
||||||
|
x2 = second->_dual.x2;
|
||||||
|
x3 = second->_dual.x3;
|
||||||
|
|
||||||
|
second->_dual.s0 = first->_dual.s0;
|
||||||
|
second->_dual.x1 = first->_dual.x1;
|
||||||
|
second->_dual.x2 = first->_dual.x2;
|
||||||
|
second->_dual.x3 = first->_dual.x3;
|
||||||
|
|
||||||
|
first->_dual.s0 = s0;
|
||||||
|
first->_dual.x1 = x1;
|
||||||
|
first->_dual.x2 = x2;
|
||||||
|
first->_dual.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void bgc_fp64_dual_versor_swap(BGC_FP64_DualVersor* first, BGC_FP64_DualVersor* second)
|
||||||
|
{
|
||||||
|
// Real
|
||||||
|
double s0 = second->_real.s0;
|
||||||
|
double x1 = second->_real.x1;
|
||||||
|
double x2 = second->_real.x2;
|
||||||
|
double x3 = second->_real.x3;
|
||||||
|
|
||||||
|
second->_real.s0 = first->_real.s0;
|
||||||
|
second->_real.x1 = first->_real.x1;
|
||||||
|
second->_real.x2 = first->_real.x2;
|
||||||
|
second->_real.x3 = first->_real.x3;
|
||||||
|
|
||||||
|
first->_real.s0 = s0;
|
||||||
|
first->_real.x1 = x1;
|
||||||
|
first->_real.x2 = x2;
|
||||||
|
first->_real.x3 = x3;
|
||||||
|
|
||||||
|
// Dual
|
||||||
|
s0 = second->_dual.s0;
|
||||||
|
x1 = second->_dual.x1;
|
||||||
|
x2 = second->_dual.x2;
|
||||||
|
x3 = second->_dual.x3;
|
||||||
|
|
||||||
|
second->_dual.s0 = first->_dual.s0;
|
||||||
|
second->_dual.x1 = first->_dual.x1;
|
||||||
|
second->_dual.x2 = first->_dual.x2;
|
||||||
|
second->_dual.x3 = first->_dual.x3;
|
||||||
|
|
||||||
|
first->_dual.s0 = s0;
|
||||||
|
first->_dual.x1 = x1;
|
||||||
|
first->_dual.x2 = x2;
|
||||||
|
first->_dual.x3 = x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Add table
Add a link
Reference in a new issue