From b470a3194b6c12126bc2a76afa1b75d282e54d66 Mon Sep 17 00:00:00 2001 From: Andrey Pokidov Date: Wed, 4 Feb 2026 21:02:15 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D0=B7=20=D0=BE=D1=82?= =?UTF-8?q?=20=D1=82=D0=B5=D1=80=D0=BC=D0=B8=D0=BD=D0=BE=D0=B2=20Versor=20?= =?UTF-8?q?=D0=B8=20Cotes=20Number=20=D0=B2=20=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D1=83=20Turn3=20=D0=B8=20Turn2,=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=B2=D0=B0=D1=82=D0=B5=D1=80=D0=BD=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B8=20Turn3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic-geometry-dev/affine3.c | 2 +- basic-geometry-dev/main.c | 157 +++---- basic-geometry-test/helpers.h | 8 +- basic-geometry/basic-geometry.cbp | 20 +- basic-geometry/basic-geometry.h | 13 +- basic-geometry/cotes-number.c | 91 ----- basic-geometry/cotes-number.h | 343 ---------------- basic-geometry/dual-quaternion.c | 4 +- basic-geometry/dual-quaternion.h | 4 +- basic-geometry/matrix2x2.c | 4 +- basic-geometry/matrix2x2.h | 4 +- basic-geometry/position2.c | 4 +- basic-geometry/position2.h | 90 ++-- basic-geometry/position3.c | 4 +- basic-geometry/position3.h | 90 ++-- basic-geometry/quaternion.c | 3 + basic-geometry/quaternion.h | 26 ++ basic-geometry/rotation3.c | 14 - basic-geometry/rotation3.h | 93 ----- basic-geometry/slerp.c | 72 ++-- basic-geometry/slerp.h | 42 +- basic-geometry/turn2.c | 91 +++++ basic-geometry/turn2.h | 343 ++++++++++++++++ basic-geometry/turn3.c | 593 +++++++++++++++++++++++++++ basic-geometry/turn3.h | 502 +++++++++++++++++++++++ basic-geometry/versor.c | 584 -------------------------- basic-geometry/versor.h | 659 ------------------------------ 27 files changed, 1815 insertions(+), 2045 deletions(-) delete mode 100644 basic-geometry/cotes-number.c delete mode 100644 basic-geometry/cotes-number.h delete mode 100644 basic-geometry/rotation3.c delete mode 100644 basic-geometry/rotation3.h create mode 100644 basic-geometry/turn2.c create mode 100644 basic-geometry/turn2.h create mode 100644 basic-geometry/turn3.c create mode 100644 basic-geometry/turn3.h delete mode 100644 basic-geometry/versor.c delete mode 100644 basic-geometry/versor.h diff --git a/basic-geometry-dev/affine3.c b/basic-geometry-dev/affine3.c index bf737f8..a607e30 100644 --- a/basic-geometry-dev/affine3.c +++ b/basic-geometry-dev/affine3.c @@ -40,7 +40,7 @@ BGC_FP32_Affine3* _create_bgc_affine3_random_list(int affine_amount) BGC_FP32_Position3 position; for (int i = 0; i < affine_amount; i++) { - bgc_fp32_versor_make( + bgc_fp32_turn3_set_raw_values( &position.turn, get_random_value_fp32(), get_random_value_fp32(), diff --git a/basic-geometry-dev/main.c b/basic-geometry-dev/main.c index 186e044..bef60f1 100644 --- a/basic-geometry-dev/main.c +++ b/basic-geometry-dev/main.c @@ -10,7 +10,7 @@ #endif // _WINDOWS_ typedef struct { - BGC_FP32_Versor versor1, versor2, result; + BGC_FP32_Turn3 versor1, versor2, result; } structure_fp32_t; structure_fp32_t* allocate_structures(const unsigned int amount) @@ -29,7 +29,7 @@ structure_fp32_t* make_structures(const unsigned int amount) const float multiplier = 2.0f / RAND_MAX; for (unsigned int i = 0; i < amount; i++) { - bgc_fp32_versor_make( + bgc_fp32_turn3_set_raw_values( &list[i].versor1, rand() * multiplier - 1.0f, rand() * multiplier - 1.0f, @@ -37,7 +37,7 @@ structure_fp32_t* make_structures(const unsigned int amount) rand() * multiplier - 1.0f ); - bgc_fp32_versor_make( + bgc_fp32_turn3_set_raw_values( &list[i].versor2, rand() * multiplier - 1.0f, rand() * multiplier - 1.0f, @@ -45,20 +45,20 @@ structure_fp32_t* make_structures(const unsigned int amount) rand() * multiplier - 1.0f ); - bgc_fp32_versor_reset(&list[i].result); + bgc_fp32_turn3_reset(&list[i].result); } return list; } -void print_versor_fp32(const BGC_FP32_Versor* versor) +void print_quaternion_fp32(const BGC_FP32_Quaternion* quaternion) { - printf("Versor (s0 = %0.12f, x1 = %0.12f, x2 = %0.12f, x3 = %0.12f)\n", versor->_s0, versor->_x1, versor->_x2, versor->_x3); + printf("Quaternion FP32(s0 = %0.12f, x1 = %0.12f, x2 = %0.12f, x3 = %0.12f)\n", quaternion->s0, quaternion->x1, quaternion->x2, quaternion->x3); } -void print_versor_fp64(const BGC_FP64_Versor* versor) +void print_quaternion_fp64(const BGC_FP64_Quaternion* quaternion) { - printf("Versor (s0 = %0.20f, x1 = %0.20f, x2 = %0.20f, x3 = %0.20f)\n", versor->_s0, versor->_x1, versor->_x2, versor->_x3); + printf("Quaternion FP64(s0 = %0.12f, x1 = %0.12f, x2 = %0.12f, x3 = %0.12f)\n", quaternion->s0, quaternion->x1, quaternion->x2, quaternion->x3); } void print_vector_fp32(const BGC_FP32_Vector3* vector) @@ -75,11 +75,11 @@ void list_work(const uint_fast32_t amount, structure_fp32_t* list) { for (uint_fast32_t j = 0; j < 1000; j++) { for (uint_fast32_t i = 0; i < amount; i++) { - bgc_fp32_versor_combine(&list[i].versor1, &list[i].versor1, &list[i].result); + bgc_fp32_turn3_combine(&list[i].result, &list[i].versor1, &list[i].versor2); } } } -/* + int main() { const unsigned int amount = 1000000; @@ -113,15 +113,15 @@ int main() printf("Time: %lf\n", (end.tv_sec - start.tv_sec) * 1000.0 + (end.tv_nsec - start.tv_nsec) * 0.000001); #endif // _WIN64 - print_versor_fp32(&list[10].versor1); - print_versor_fp32(&list[10].versor2); - print_versor_fp32(&list[10].result); + print_quaternion_fp32(&list[10].versor1._versor); + print_quaternion_fp32(&list[10].versor2._versor); + print_quaternion_fp32(&list[10].result._versor); free(list); return 0; } -*/ + /* int main() { @@ -140,10 +140,10 @@ int main() { */ /* int main() { - BGC_FP32_Versor start = { 1.0f, 0.0f, 0.0f, 0.0f }; - BGC_FP32_Versor end = { 0.0f, 1.0f, 0.0f, 0.0f }; - BGC_FP32_Versor result; - bgc_fp32_versor_spherical_interpolation(&start, &end, 0.5f, &result); + BGC_FP32_Turn3 start = { 1.0f, 0.0f, 0.0f, 0.0f }; + BGC_FP32_Turn3 end = { 0.0f, 1.0f, 0.0f, 0.0f }; + BGC_FP32_Turn3 result; + bgc_fp32_turn3_spherical_interpolation(&start, &end, 0.5f, &result); printf("Result: %0.12f, %0.12f, %0.12f, %0.12f\n", result.s0, result.x1, result.x2, result.x3); return 0; } @@ -154,7 +154,7 @@ void test_basis_difference_fp32() BGC_FP32_Vector3 initial_primary, initial_auxiliary; BGC_FP32_Vector3 final_primary, final_auxiliary; - BGC_FP32_Versor turn; + BGC_FP32_Turn3 turn; // No turn bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -163,10 +163,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 1.0f, 0.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 0.0f, 1.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nNo turn:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // Turn around (1, 1, 0) axis on 180 degrees bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -175,10 +175,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, 1.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 1.0f, 0.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nTurn around (1, 1, 0) axis on 180 degrees:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // 180 degree turn bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -187,10 +187,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, -1.0f, 0.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 0.0f, 1.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n180 degree turn around (0, 1, 0):\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // 90 degree turn around x3 axis bgc_fp32_vector3_make(&initial_primary, 2.0f, 0.0f, 0.0f); @@ -199,10 +199,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, 10.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary,-1.0f, 0.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n90 degree turn around (0, 0, 1):\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // Unorthogonal pairs turn at 90 degrees around x3 axis bgc_fp32_vector3_make(&initial_primary, 2.0f, 0.0f, 0.0f); @@ -211,10 +211,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, 10.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, -1.0f, 5.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nUnorthogonal pairs turn at 90 degrees around (0, 0, 1):\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // Zero vectors bgc_fp32_vector3_make(&initial_primary, 0.0f, 0.0f, 0.0f); @@ -224,11 +224,11 @@ void test_basis_difference_fp32() int code; - code = bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + code = bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); if (code >= 0) { printf("\nZero vectors: this cannot be!\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); } else { printf("\nZero vector validation works fine\n"); @@ -240,11 +240,11 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 1.0f, 0.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 0.0f, 1.0f, 0.0f); - code = bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + code = bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); if (code >= 0) { printf("\nParallel vectors: this cannot be!\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); } else { printf("\nParallelism validation works fine\n"); @@ -257,10 +257,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.999848f, 0.017452f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, -0.017452f, 0.999848f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn , &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn , &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nSmall angle turn (about 1 degree):\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // About 179 degrees turn bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -269,10 +269,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, -0.999848f, -0.017452f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 0.017452f, -0.999848f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 179 degrees turn:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // 120 degrees around (-1, -1, 1) bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -281,10 +281,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, 1.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 0.0f, 0.0f, -1.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n120 degees turn:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // About 1 degree turn difference between initial_primary and initial_auxiliary directions @@ -293,10 +293,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, 1.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, -1.0f, 0.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 1 degree turn difference between initial_primary and initial_auxiliary directions:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); // About 0.01 degree turn difference between initial_primary and initial_auxiliary directions bgc_fp32_vector3_make(&initial_primary, 1.0f, 0.0f, 0.0f); @@ -304,10 +304,10 @@ void test_basis_difference_fp32() bgc_fp32_vector3_make(&final_primary, 0.0f, -1.0f, 0.0f); bgc_fp32_vector3_make(&final_auxiliary, 1.0f, 0.0f, 0.0f); - bgc_fp32_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp32_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 0.01 degree turn difference between initial_primary and initial_auxiliary directions:\n"); - print_versor_fp32(&turn); + print_quaternion_fp32(&turn._versor); } void test_basis_difference_fp64() @@ -315,7 +315,7 @@ void test_basis_difference_fp64() BGC_FP64_Vector3 initial_primary, initial_auxiliary; BGC_FP64_Vector3 final_primary, final_auxiliary; - BGC_FP64_Versor turn; + BGC_FP64_Turn3 turn; // No turn bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -323,10 +323,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 1.0, 0.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 0.0, 1.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nNo turn:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // Turn around (1, 1, 0) axis on 180 degrees bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -334,10 +334,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, 1.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 1.0, 0.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nTurn around (1, 1, 0) axis on 180 degrees:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // 180 degree turn bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -346,10 +346,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&initial_auxiliary, -1.0, 0.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 0.0, 1.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n180 degree turn around (0, 1, 0):\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // 90 degree turn around x3 axis bgc_fp64_vector3_make(&initial_primary, 2.0, 0.0, 0.0); @@ -358,10 +358,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, 10.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, -1.0, 0.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n90 degree turn around (0, 0, 1):\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // Unorthogonal pairs turn at 90 degrees around x3 axis bgc_fp64_vector3_make(&initial_primary, 2.0, 0.0, 0.0); @@ -370,10 +370,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, 10.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, -1.0, 5.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nUnorthogonal pairs turn at 90 degrees around (0, 0, 1):\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // Zero vectors bgc_fp64_vector3_make(&initial_primary, 0.0, 0.0, 0.0); @@ -383,11 +383,11 @@ void test_basis_difference_fp64() int code; - code = bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + code = bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); if (code >= 0) { printf("\nZero vectors: this cannot be!\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); } else { printf("\nZero vector validation works fine\n"); @@ -399,11 +399,11 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 1.0, 0.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 0.0, 1.0, 0.0); - code = bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + code = bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); if (code >= 0) { printf("\nParallel vectors: this cannot be!\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); } else { printf("\nParallelism validation works fine\n"); @@ -416,10 +416,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.999848, 0.017452, 0.0); bgc_fp64_vector3_make(&final_auxiliary, -0.017452, 0.999848, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nSmall angle turn (about 1 degree):\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // About 179 degrees turn bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -428,10 +428,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, -0.999848, -0.017452, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 0.017452, -0.999848, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 179 degrees turn:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // 120 degrees around (-1, -1, 1) bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -440,10 +440,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, 1.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 0.0, 0.0, -1.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\n120 degees turn:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // About 1 degree turn difference between initial_primary and initial_auxiliary directions @@ -452,10 +452,10 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, 1.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, -1.0, 0.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 1 degree turn difference between initial_primary and initial_auxiliary directions:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); // About 0.001 degree turn difference between initial_primary and initial_auxiliary directions bgc_fp64_vector3_make(&initial_primary, 1.0, 0.0, 0.0); @@ -463,30 +463,30 @@ void test_basis_difference_fp64() bgc_fp64_vector3_make(&final_primary, 0.0, -1.0, 0.0); bgc_fp64_vector3_make(&final_auxiliary, 1.0, 0.0, 0.0); - bgc_fp64_versor_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); + bgc_fp64_turn3_make_basis_difference(&turn, &initial_primary, &initial_auxiliary, &final_primary, &final_auxiliary); printf("\nAbout 0.01 degree turn difference between initial_primary and initial_auxiliary directions:\n"); - print_versor_fp64(&turn); + print_quaternion_fp64(&turn._versor); } - +/* #include "affine3.h" int main() { - //BGC_FP32_Versor start = { 1.0f, 0.0f, 0.0f, 0.0f }; - //BGC_FP32_Versor end = { 0.0f, 1.0f, 0.0f, 0.0f }; - - BGC_FP32_Versor start = { 1.0f, 0.0f, 0.0f, 0.0f }; - BGC_FP32_Versor end = { 0.9999f, 0.01414f, 0.0f, 0.0f }; + //BGC_FP32_Turn3 start = { 1.0f, 0.0f, 0.0f, 0.0f }; + //BGC_FP32_Turn3 end = { 0.0f, 1.0f, 0.0f, 0.0f }; + + BGC_FP32_Turn3 start = { 1.0f, 0.0f, 0.0f, 0.0f }; + BGC_FP32_Turn3 end = { 0.9999f, 0.01414f, 0.0f, 0.0f }; BGC_FP32_Slerp slerp; - BGC_FP32_Versor result; + BGC_FP32_Turn3 result; bgc_fp32_slerp_make_full(&slerp, &start, &end); bgc_fp32_slerp_get_phase_versor(&result, &slerp, 0.5f); - //print_versor_fp32(&result); - + //print_quaternion_fp32(&result); + test_basis_difference_fp64(); - + //printf("Affine3 performance test: %f\n", test_bgc_affine3_performance(10000000, 10)); //printf("sizeof(BGC_FP32_Affine3) = %zu\n", sizeof(BGC_FP32_Affine3)); @@ -495,3 +495,4 @@ int main() return 0; } +*/ diff --git a/basic-geometry-test/helpers.h b/basic-geometry-test/helpers.h index 10bd548..2044198 100644 --- a/basic-geometry-test/helpers.h +++ b/basic-geometry-test/helpers.h @@ -25,19 +25,19 @@ typedef struct { // =================== Versor =================== // typedef struct { - BGC_FP32_Versor first, second; + BGC_FP32_Turn3 first, second; } TestVersorPairFP32; typedef struct { - BGC_FP64_Versor first, second; + BGC_FP64_Turn3 first, second; } TestVersorPairFP64; typedef struct { - BGC_FP32_Versor first, second, result; + BGC_FP32_Turn3 first, second, result; } TestVersorTripletFP32; typedef struct { - BGC_FP64_Versor first, second, result; + BGC_FP64_Turn3 first, second, result; } TestVersorTripletFP64; // ================= Functions ================== // diff --git a/basic-geometry/basic-geometry.cbp b/basic-geometry/basic-geometry.cbp index 7008f8e..4d62d04 100644 --- a/basic-geometry/basic-geometry.cbp +++ b/basic-geometry/basic-geometry.cbp @@ -60,10 +60,6 @@