Добавление дуальных чисел, дуальных векторов (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="complex.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="matrix2x3.h" />
|
||||
<ClInclude Include="matrix3x2.h" />
|
||||
|
|
@ -47,6 +51,10 @@
|
|||
<ClCompile Include="angle.c" />
|
||||
<ClInclude Include="complex.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="position3.c" />
|
||||
<ClCompile Include="utilities.c" />
|
||||
|
|
|
|||
|
|
@ -84,6 +84,18 @@
|
|||
<ClInclude Include="position3.h">
|
||||
<Filter>Файлы заголовков</Filter>
|
||||
</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>
|
||||
<ClCompile Include="angle.c">
|
||||
|
|
@ -137,5 +149,17 @@
|
|||
<ClCompile Include="position3.c">
|
||||
<Filter>Исходные файлы</Filter>
|
||||
</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>
|
||||
</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);
|
||||