mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-14 15:33:26 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 231ef35a0a | |||
| 1aa62cb396 | |||
| 8e411771c2 | |||
| d65852d1a4 | |||
| 21f5e82a20 | |||
|
|
851ec37350 | ||
| f1cd9dbeb3 | |||
| 7a1c7d6cc4 | |||
| cb704b3621 | |||
|
|
646d295876 | ||
| 8e09556c25 | |||
| 7dbebc996d | |||
| 278ffba0ff | |||
| 647cf02a38 | |||
| 4be2986681 |
@@ -14,6 +14,8 @@ option(OMATH_BUILD_EXAMPLES "Build example projects with you can learn & play" O
|
|||||||
option(OMATH_STATIC_MSVC_RUNTIME_LIBRARY "Force Omath to link static runtime" OFF)
|
option(OMATH_STATIC_MSVC_RUNTIME_LIBRARY "Force Omath to link static runtime" OFF)
|
||||||
option(OMATH_SUPRESS_SAFETY_CHECKS "Supress some safety checks in release build to improve general performance" ON)
|
option(OMATH_SUPRESS_SAFETY_CHECKS "Supress some safety checks in release build to improve general performance" ON)
|
||||||
option(OMATH_USE_UNITY_BUILD "Will enable unity build to speed up compilation" ON)
|
option(OMATH_USE_UNITY_BUILD "Will enable unity build to speed up compilation" ON)
|
||||||
|
option(OMATH_ENABLE_LEGACY "Will enable legacy classes that MUST be used ONLY for backward compatibility" OFF)
|
||||||
|
|
||||||
|
|
||||||
file(GLOB_RECURSE OMATH_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp")
|
file(GLOB_RECURSE OMATH_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp")
|
||||||
file(GLOB_RECURSE OMATH_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")
|
file(GLOB_RECURSE OMATH_HEADERS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")
|
||||||
@@ -56,6 +58,10 @@ if (OMATH_SUPRESS_SAFETY_CHECKS)
|
|||||||
target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_SUPRESS_SAFETY_CHECKS)
|
target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_SUPRESS_SAFETY_CHECKS)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (OMATH_ENABLE_LEGACY)
|
||||||
|
target_compile_options(${PROJECT_NAME} PUBLIC OMATH_ENABLE_LEGACY)
|
||||||
|
endif ()
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
||||||
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
||||||
|
|||||||
14
INSTALL.md
14
INSTALL.md
@@ -14,6 +14,20 @@ target_link_libraries(main PRIVATE omath::omath)
|
|||||||
```
|
```
|
||||||
For detailed commands on installing different versions and more information, please refer to Microsoft's [official instructions](https://learn.microsoft.com/en-us/vcpkg/get_started/overview).
|
For detailed commands on installing different versions and more information, please refer to Microsoft's [official instructions](https://learn.microsoft.com/en-us/vcpkg/get_started/overview).
|
||||||
|
|
||||||
|
## <img width="28px" src="https://xmake.io/assets/img/logo.svg" /> Using xrepo
|
||||||
|
**Note**: Support xrepo for package management
|
||||||
|
1. Install [xmake](https://xmake.io/)
|
||||||
|
2. Run the following command to install the omath package:
|
||||||
|
```
|
||||||
|
xrepo install omath
|
||||||
|
```
|
||||||
|
xmake.lua
|
||||||
|
```xmake
|
||||||
|
add_requires("omath")
|
||||||
|
target("...")
|
||||||
|
add_packages("omath")
|
||||||
|
```
|
||||||
|
|
||||||
## <img width="28px" src="https://upload.wikimedia.org/wikipedia/commons/e/ef/CMake_logo.svg?" /> Build from source using CMake
|
## <img width="28px" src="https://upload.wikimedia.org/wikipedia/commons/e/ef/CMake_logo.svg?" /> Build from source using CMake
|
||||||
1. **Preparation**
|
1. **Preparation**
|
||||||
|
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -7,11 +7,22 @@
|
|||||||

|

|
||||||
[](https://www.codefactor.io/repository/github/orange-cpp/omath)
|
[](https://www.codefactor.io/repository/github/orange-cpp/omath)
|
||||||

|

|
||||||
|
[](https://repology.org/project/orange-math/versions)
|
||||||

|

|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Oranges's Math Library (omath) is a comprehensive, open-source library aimed at providing efficient, reliable, and versatile mathematical functions and algorithms. Developed primarily in C++, this library is designed to cater to a wide range of mathematical operations essential in scientific computing, engineering, and academic research.
|
Oranges's Math Library (omath) is a comprehensive, open-source library aimed at providing efficient, reliable, and versatile mathematical functions and algorithms. Developed primarily in C++, this library is designed to cater to a wide range of mathematical operations essential in scientific computing, engineering, and academic research.
|
||||||
|
|
||||||
|
<div align = center>
|
||||||
|
<a href="https://www.star-history.com/#orange-cpp/omath&Date">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=orange-cpp/omath&type=Date&theme=dark" />
|
||||||
|
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=orange-cpp/omath&type=Date" />
|
||||||
|
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=orange-cpp/omath&type=Date" />
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
## 👁🗨 Features
|
## 👁🗨 Features
|
||||||
- **Efficiency**: Optimized for performance, ensuring quick computations using AVX2.
|
- **Efficiency**: Optimized for performance, ensuring quick computations using AVX2.
|
||||||
- **Versatility**: Includes a wide array of mathematical functions and algorithms.
|
- **Versatility**: Includes a wide array of mathematical functions and algorithms.
|
||||||
@@ -71,7 +82,7 @@ Or even advanced projectile aimbot
|
|||||||
Contributions to `omath` are welcome! Please read `CONTRIBUTING.md` for details on our code of conduct and the process for submitting pull requests.
|
Contributions to `omath` are welcome! Please read `CONTRIBUTING.md` for details on our code of conduct and the process for submitting pull requests.
|
||||||
|
|
||||||
## 📜 License
|
## 📜 License
|
||||||
This project is licensed under the MIT - see the `LICENSE` file for details.
|
This project is licensed under the ZLIB - see the `LICENSE` file for details.
|
||||||
|
|
||||||
## 💘 Acknowledgments
|
## 💘 Acknowledgments
|
||||||
- [All contributors](https://github.com/orange-cpp/omath/graphs/contributors)
|
- [All contributors](https://github.com/orange-cpp/omath/graphs/contributors)
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef OMATH_ENABLE_LEGACY
|
||||||
|
|
||||||
#include "omath/vector3.hpp"
|
#include "omath/vector3.hpp"
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -106,3 +109,4 @@ namespace omath
|
|||||||
std::unique_ptr<float[]> m_data;
|
std::unique_ptr<float[]> m_data;
|
||||||
};
|
};
|
||||||
} // namespace omath
|
} // namespace omath
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#ifdef OMATH_ENABLE_LEGACY
|
||||||
|
|
||||||
#include "omath/matrix.hpp"
|
#include "omath/matrix.hpp"
|
||||||
#include "omath/angles.hpp"
|
#include "omath/angles.hpp"
|
||||||
#include "omath/vector3.hpp"
|
#include "omath/vector3.hpp"
|
||||||
@@ -359,3 +361,4 @@ namespace omath
|
|||||||
m_data = nullptr;
|
m_data = nullptr;
|
||||||
}
|
}
|
||||||
} // namespace omath
|
} // namespace omath
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ namespace
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Fixture with one canonical right‑angled triangle in the XY plane.
|
// Fixture with one canonical right‑angled triangle in the XY plane.
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
class lline_tracer_fixture : public ::testing::Test
|
class line_tracer_fixture : public ::testing::Test
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
lline_tracer_fixture() :
|
line_tracer_fixture() :
|
||||||
triangle({0.f, 0.f, 0.f}, {1.f, 0.f, 0.f}, {0.f, 1.f, 0.f})
|
triangle({0.f, 0.f, 0.f}, {1.f, 0.f, 0.f}, {0.f, 1.f, 0.f})
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -51,7 +51,7 @@ namespace
|
|||||||
bool expected_clear; // true => segment does NOT hit the triangle
|
bool expected_clear; // true => segment does NOT hit the triangle
|
||||||
};
|
};
|
||||||
|
|
||||||
class CanTraceLineParam : public lline_tracer_fixture,
|
class CanTraceLineParam : public line_tracer_fixture,
|
||||||
public ::testing::WithParamInterface<TraceCase>
|
public ::testing::WithParamInterface<TraceCase>
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
@@ -79,7 +79,7 @@ namespace
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Validate that the reported hit point is correct for a genuine intersection.
|
// Validate that the reported hit point is correct for a genuine intersection.
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
TEST_F(lline_tracer_fixture, HitPointCorrect)
|
TEST_F(line_tracer_fixture, HitPointCorrect)
|
||||||
{
|
{
|
||||||
constexpr Ray ray{{0.3f, 0.3f, -1.f}, {0.3f, 0.3f, 1.f}};
|
constexpr Ray ray{{0.3f, 0.3f, -1.f}, {0.3f, 0.3f, 1.f}};
|
||||||
constexpr Vec3 expected{0.3f, 0.3f, 0.f};
|
constexpr Vec3 expected{0.3f, 0.3f, 0.f};
|
||||||
@@ -92,7 +92,7 @@ namespace
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Triangle far beyond the ray should not block.
|
// Triangle far beyond the ray should not block.
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
TEST_F(lline_tracer_fixture, DistantTriangleClear)
|
TEST_F(line_tracer_fixture, DistantTriangleClear)
|
||||||
{
|
{
|
||||||
constexpr Ray short_ray{{0.f, 0.f, 0.f}, {0.f, 0.f, 1.f}};
|
constexpr Ray short_ray{{0.f, 0.f, 0.f}, {0.f, 0.f, 1.f}};
|
||||||
constexpr Triangle<Vec3> distant{{1000.f, 1000.f, 1000.f},
|
constexpr Triangle<Vec3> distant{{1000.f, 1000.f, 1000.f},
|
||||||
|
|||||||
@@ -167,8 +167,8 @@ TEST_F(unit_test_mat, StaticMethod_ToScreenMat)
|
|||||||
TEST_F(unit_test_mat, Method_At_OutOfRange)
|
TEST_F(unit_test_mat, Method_At_OutOfRange)
|
||||||
{
|
{
|
||||||
#if !defined(NDEBUG) && defined(OMATH_SUPRESS_SAFETY_CHECKS)
|
#if !defined(NDEBUG) && defined(OMATH_SUPRESS_SAFETY_CHECKS)
|
||||||
EXPECT_THROW(std::ignore = m2.At(2, 0), std::out_of_range);
|
EXPECT_THROW(std::ignore = m2.at(2, 0), std::out_of_range);
|
||||||
EXPECT_THROW(std::ignore = m2.At(0, 2), std::out_of_range);
|
EXPECT_THROW(std::ignore = m2.at(0, 2), std::out_of_range);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
//
|
//
|
||||||
// Created by vlad on 5/18/2024.
|
// Created by vlad on 5/18/2024.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#ifdef OMATH_ENABLE_LEGACY
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <omath/matrix.hpp>
|
#include <omath/matrix.hpp>
|
||||||
#include "omath/vector3.hpp"
|
#include "omath/vector3.hpp"
|
||||||
@@ -177,4 +180,5 @@ TEST_F(UnitTestMatrix, AssignmentOperator_Move)
|
|||||||
EXPECT_FLOAT_EQ(m3.at(0, 0), 1.0f);
|
EXPECT_FLOAT_EQ(m3.at(0, 0), 1.0f);
|
||||||
EXPECT_EQ(m2.row_count(), 0); // m2 should be empty after the move
|
EXPECT_EQ(m2.row_count(), 0); // m2 should be empty after the move
|
||||||
EXPECT_EQ(m2.columns_count(), 0);
|
EXPECT_EQ(m2.columns_count(), 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user