Добавление сферической интерполяции, переход от применения acos к применению atan2, исправление ошибок
This commit is contained in:
parent
f06b35ae34
commit
9d7011e81e
17 changed files with 558 additions and 134 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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" />
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||