From a65f49049ed9322c53750b8c60da8cbb05d53110 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Fri, 10 May 2024 13:24:11 +0900 Subject: [PATCH 1/2] Add Vec3 negate and Vec3 normalize functions --- src/sc_sacd.cpp | 8 +++++++ src/sc_sacd.h | 5 ++++ src/test.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/src/sc_sacd.cpp b/src/sc_sacd.cpp index ac1f5c5..7b96a9d 100644 --- a/src/sc_sacd.cpp +++ b/src/sc_sacd.cpp @@ -684,6 +684,14 @@ SC_SACD_Vec3 SC_SACD_Vec3_Div(SC_SACD_Vec3 vec, float scalar) { return vec / scalar; } +SC_SACD_Vec3 SC_SACD_Vec3_Negate(SC_SACD_Vec3 vec) { + return SC_SACD_Vec3{-vec.x, -vec.y, -vec.z}; +} + +SC_SACD_Vec3 SC_SACD_Vec3_Normalize(SC_SACD_Vec3 vec) { + return vec / SC_SACD_Vec3_Length(vec); +} + SC_SACD_Vec3 SC_SACD_Vec3_Project(SC_SACD_Vec3 vec, SC_SACD_Vec3 target) { float upper_dot_product = SC_SACD_Dot_Product(vec, target); float lower_dot_product = SC_SACD_Dot_Product(target, target); diff --git a/src/sc_sacd.h b/src/sc_sacd.h index 8b400a9..ae05156 100644 --- a/src/sc_sacd.h +++ b/src/sc_sacd.h @@ -142,6 +142,11 @@ SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Difference(SC_SACD_Vec3 a, SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Mult(SC_SACD_Vec3 vec, float scalar); SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Div(SC_SACD_Vec3 vec, float scalar); +SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Negate(SC_SACD_Vec3 vec); + +/// Turns vec into a unit vector and returns the unit vector. +SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Normalize(SC_SACD_Vec3 vec); + /// Projects "vec" onto "target". SC_SACD_EXPORT SC_SACD_Vec3 SC_SACD_Vec3_Project(SC_SACD_Vec3 vec, SC_SACD_Vec3 target); diff --git a/src/test.cpp b/src/test.cpp index ea8e03c..1fe322c 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -840,6 +840,68 @@ int main() { CHECK_FLOAT(result.z, 3.0F); } + // Test negate. + { + SC_SACD_Vec3 vec{1.0F, 2.0F, 3.0F}; + vec = SC_SACD_Vec3_Negate(vec); + CHECK_FLOAT(vec.x, -1.0F); + CHECK_FLOAT(vec.y, -2.0F); + CHECK_FLOAT(vec.z, -3.0F); + } + + // Test normalize. + { + SC_SACD_Vec3 vec{1.0F, 0.0F, 0.0F}; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, 1.0F); + CHECK_FLOAT(vec.y, 0.0F); + CHECK_FLOAT(vec.z, 0.0F); + + vec.x = 0.0F; + vec.y = -1.0F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, 0.0F); + CHECK_FLOAT(vec.y, -1.0F); + CHECK_FLOAT(vec.z, 0.0F); + + vec.y = 0.0F; + vec.z = 0.7F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, 0.0F); + CHECK_FLOAT(vec.y, 0.0F); + CHECK_FLOAT(vec.z, 1.0F); + + vec.x = 1.0F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, std::sqrt(0.5F)); + CHECK_FLOAT(vec.y, 0.0F); + CHECK_FLOAT(vec.z, std::sqrt(0.5F)); + + vec.x = 1.0F; + vec.y = 1.0F; + vec.z = 1.0F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, std::sqrt(1.0F / 3.0F)); + CHECK_FLOAT(vec.y, std::sqrt(1.0F / 3.0F)); + CHECK_FLOAT(vec.z, std::sqrt(1.0F / 3.0F)); + + vec.x = 1.0F; + vec.y = -1.0F; + vec.z = -1.0F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, std::sqrt(1.0F / 3.0F)); + CHECK_FLOAT(vec.y, -std::sqrt(1.0F / 3.0F)); + CHECK_FLOAT(vec.z, -std::sqrt(1.0F / 3.0F)); + + vec.x = 1.0F; + vec.y = 2.0F; + vec.z = 3.0F; + vec = SC_SACD_Vec3_Normalize(vec); + CHECK_FLOAT(vec.x, std::sqrt(1.0F / 14.0F)); + CHECK_FLOAT(vec.y, std::sqrt(4.0F / 14.0F)); + CHECK_FLOAT(vec.z, std::sqrt(9.0F / 14.0F)); + } + std::cout << "Checks checked: " << checks_checked << '\n' << "Checks passed: " << checks_passed << '\n'; From 76465bb31afacd8468896b74d9763333d740f068 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Fri, 10 May 2024 13:24:52 +0900 Subject: [PATCH 2/2] Bump version to 3.2.0, update Changelog --- CMakeLists.txt | 2 +- Changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a93d65..34cf3c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ set(SC_3D_CollisionDetectionHelpers_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/src/sc_ add_library(SC_3D_CollisionDetectionHelpers ${SC_3D_CollisionDetectionHelpers_SOURCES}) -set_target_properties(SC_3D_CollisionDetectionHelpers PROPERTIES VERSION 3.1.0 SOVERSION 3) +set_target_properties(SC_3D_CollisionDetectionHelpers PROPERTIES VERSION 3.2.0 SOVERSION 3) target_compile_features(SC_3D_CollisionDetectionHelpers PUBLIC cxx_std_20) if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "") diff --git a/Changelog.md b/Changelog.md index 6813733..a80de55 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,9 @@ # Changelog +## Version 3.2.0 + +Add Vec3 negate and normalize functions. + ## Version 3.1.0 Add Vec3 helper functions.