Добавление сферической интерполяции, переход от применения acos к применению atan2, исправление ошибок

This commit is contained in:
Andrey Pokidov 2025-03-17 09:56:56 +07:00
parent f06b35ae34
commit 9d7011e81e
17 changed files with 558 additions and 134 deletions

View file

@ -138,17 +138,36 @@ int main() {
return 0; return 0;
} }
*/ */
/*
int main() { int main() {
const float exponent = 2.0f; BgcVersorFP32 start = { 1.0f, 0.0f, 0.0f, 0.0f };
BgcVersorFP32 end = { 0.0f, 1.0f, 0.0f, 0.0f };
BgcVersorFP32 turn, result; BgcVersorFP32 result;
bgc_versor_spherical_interpolation_fp32(&start, &end, 0.5f, &result);
bgc_versor_set_turn_fp32(0, 0, 1, 120, BGC_ANGLE_UNIT_DEGREES, &turn); printf("Result: %0.12f, %0.12f, %0.12f, %0.12f\n", result.s0, result.x1, result.x2, result.x3);
return 0;
bgc_versor_get_exponation_fp32(&turn, exponent, &result); }
*/
printf("(%f, %f, %f, %f) ^ %f = (%f, %f, %f, %f)\n", turn.s0, turn.x1, turn.x2, turn.x3, exponent, result.s0, result.x1, result.x2, result.x3);
int main() {
//BgcVersorFP32 start = { 1.0f, 0.0f, 0.0f, 0.0f };
//BgcVersorFP32 end = { 0.0f, 1.0f, 0.0f, 0.0f };
/*
BgcVersorFP32 start = { 1.0f, 0.0f, 0.0f, 0.0f };
BgcVersorFP32 end = { 0.9999f, 0.01414f, 0.0f, 0.0f };
BgcSlerpFP32 slerp;
BgcVersorFP32 result;
bgc_slerp_make_fp32(&start, &end, &slerp);
bgc_slerp_get_turn_for_phase_fp32(&slerp, 0.5f, &result);
printf("Result: %0.12f, %0.12f, %0.12f, %0.12f\n", result.s0, result.x1, result.x2, result.x3);
*/
BgcVersorFP64 start = { 1.0, 0.0, 0.0, 0.0 };
BgcVersorFP64 end = { -0.707, 0.707, 0.0, 0.0 };
BgcVersorFP64 result;
BgcSlerpFP64 slerp;
bgc_slerp_make_full_fp64(&start, &end, &slerp);
bgc_slerp_get_turn_for_phase_fp64(&slerp, 0.5f, &result);
printf("Result: %0.15f, %0.15f, %0.15f, %0.15f\n", result.s0, result.x1, result.x2, result.x3);
return 0; return 0;
} }

View file

@ -13,7 +13,7 @@
#include "./matrix2x3.h" #include "./matrix2x3.h"
#include "./matrix3x2.h" #include "./matrix3x2.h"
#include "./matrix3x3.h" #include "./matrix3x3.h"
#include "./complex.h" #include "./complex.h"
#include "./cotes-number.h" #include "./cotes-number.h"
@ -21,5 +21,6 @@
#include "./quaternion.h" #include "./quaternion.h"
#include "./versor.h" #include "./versor.h"
#include "./slerp.h"
#endif #endif

View file

@ -21,8 +21,8 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="angle.h" /> <ClInclude Include="angle.h" />
<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="matrix2x2.h" /> <ClInclude Include="matrix2x2.h" />
<ClInclude Include="matrix2x3.h" /> <ClInclude Include="matrix2x3.h" />
<ClInclude Include="matrix3x2.h" /> <ClInclude Include="matrix3x2.h" />
@ -31,14 +31,15 @@
<ClInclude Include="quaternion.h" /> <ClInclude Include="quaternion.h" />
<ClInclude Include="rotation3.h" /> <ClInclude Include="rotation3.h" />
<ClInclude Include="utilities.h" /> <ClInclude Include="utilities.h" />
<ClInclude Include="slerp.h" />
<ClInclude Include="versor.h" /> <ClInclude Include="versor.h" />
<ClInclude Include="vector2.h" /> <ClInclude Include="vector2.h" />
<ClInclude Include="vector3.h" /> <ClInclude Include="vector3.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<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="utilities.c" /> <ClCompile Include="utilities.c" />
<ClCompile Include="matrix2x2.c" /> <ClCompile Include="matrix2x2.c" />
<ClCompile Include="matrix2x3.c" /> <ClCompile Include="matrix2x3.c" />
@ -47,6 +48,7 @@
<ClCompile Include="matrixes.c" /> <ClCompile Include="matrixes.c" />
<ClCompile Include="quaternion.c" /> <ClCompile Include="quaternion.c" />
<ClCompile Include="rotation3.c" /> <ClCompile Include="rotation3.c" />
<ClCompile Include="slerp.c" />
<ClCompile Include="versor.c" /> <ClCompile Include="versor.c" />
<ClCompile Include="vector2.c" /> <ClCompile Include="vector2.c" />
<ClCompile Include="vector3.c" /> <ClCompile Include="vector3.c" />

View file

@ -18,12 +18,12 @@
<ClInclude Include="angle.h"> <ClInclude Include="angle.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="complex.h"> <ClInclude Include="complex.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="cotes-number.h"> <ClInclude Include="cotes-number.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="utilities.h"> <ClInclude Include="utilities.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
@ -60,17 +60,20 @@
<ClInclude Include="matrixes.h"> <ClInclude Include="matrixes.h">
<Filter>Файлы заголовков</Filter> <Filter>Файлы заголовков</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="complex.c">
<Filter>Исходные файлы</Filter>
</ClInclude>
<ClInclude Include="cotes-number.c">
<Filter>Исходные файлы</Filter>
</ClInclude>
<ClInclude Include="slerp.h">
<Filter>Файлы заголовков</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="angle.c"> <ClCompile Include="angle.c">
<Filter>Исходные файлы</Filter> <Filter>Исходные файлы</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="complex.c">
<Filter>Исходные файлы</Filter>
</ClCompile>
<ClCompile Include="cotes-number.c">
<Filter>Исходные файлы</Filter>
</ClCompile>
<ClCompile Include="utilities.c"> <ClCompile Include="utilities.c">
<Filter>Исходные файлы</Filter> <Filter>Исходные файлы</Filter>
</ClCompile> </ClCompile>
@ -104,5 +107,8 @@
<ClCompile Include="matrix3x2.c"> <ClCompile Include="matrix3x2.c">
<Filter>Исходные файлы</Filter> <Filter>Исходные файлы</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="slerp.c">
<Filter>Исходные файлы</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View file

@ -69,8 +69,8 @@ extern inline void bgc_complex_get_mean_of_two_fp64(const BgcComplexFP64* number
extern inline void bgc_complex_get_mean_of_three_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const BgcComplexFP32* number3, BgcComplexFP32* mean); extern inline void bgc_complex_get_mean_of_three_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const BgcComplexFP32* number3, BgcComplexFP32* mean);
extern inline void bgc_complex_get_mean_of_three_fp64(const BgcComplexFP64* number1, const BgcComplexFP64* number2, const BgcComplexFP64* number3, BgcComplexFP64* mean); extern inline void bgc_complex_get_mean_of_three_fp64(const BgcComplexFP64* number1, const BgcComplexFP64* number2, const BgcComplexFP64* number3, BgcComplexFP64* mean);
extern inline void bgc_complex_get_linear_interpolation_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const float phase, BgcComplexFP32* interpolation); extern inline void bgc_complex_interpolate_linearly_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const float phase, BgcComplexFP32* interpolation);
extern inline void bgc_complex_get_linear_interpolation_fp64(const BgcComplexFP64* number1, const BgcComplexFP64* number2, const double phase, BgcComplexFP64* interpolation); extern inline void bgc_complex_interpolate_linearly_fp64(const BgcComplexFP64* number1, const BgcComplexFP64* number2, const double phase, BgcComplexFP64* interpolation);
extern inline void bgc_complex_minimize_fp32(const BgcComplexFP32* number, BgcComplexFP32* minimal); extern inline void bgc_complex_minimize_fp32(const BgcComplexFP32* number, BgcComplexFP32* minimal);
extern inline void bgc_complex_minimize_fp64(const BgcComplexFP64* number, BgcComplexFP64* minimal); extern inline void bgc_complex_minimize_fp64(const BgcComplexFP64* number, BgcComplexFP64* minimal);

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

@ -428,7 +428,7 @@ inline void bgc_complex_get_mean_of_three_fp64(const BgcComplexFP64* number1, co
// =================== Linear =================== // // =================== Linear =================== //
inline void bgc_complex_get_linear_interpolation_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const float phase, BgcComplexFP32* interpolation) inline void bgc_complex_interpolate_linearly_fp32(const BgcComplexFP32* number1, const BgcComplexFP32* number2, const float phase, BgcComplexFP32* interpolation)
{ {
const float counterphase = 1.0f - phase; const float counterphase = 1.0f - phase;
@ -436,7 +436,7 @@ inline void bgc_complex_get_linear_interpolation_fp32(const BgcComplexFP32* numb
interpolation->imaginary = number1->imaginary * counterphase + number2->imaginary * phase; interpolation->imaginary = number1->imaginary * counterphase + number2->imaginary * phase;
} }