Добавление дуальных чисел, дуальных векторов (3D) и дуальных версоров

This commit is contained in:
Andrey Pokidov 2026-02-03 03:33:53 +07:00
parent 043cc72c81
commit 3f96b661a9
8 changed files with 440 additions and 0 deletions

View file

@ -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" />

View file

@ -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>

View 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);

View 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

View 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);

View file

Internal server error - Personal Git Server: Beyond coding. We Forge.

500

Internal server error

Forgejo version: 11.0.1+gitea-1.22.0

@ -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);