rebranding moment

This commit is contained in:
2024-07-09 19:29:22 +03:00
parent 528b8a0ca9
commit 13e7adc8f6
24 changed files with 105 additions and 70 deletions

View File

@@ -1,12 +1,12 @@
cmake_minimum_required(VERSION 3.26) cmake_minimum_required(VERSION 3.26)
project(uml) project(omath)
set(CMAKE_CXX_STANDARD 26) set(CMAKE_CXX_STANDARD 26)
option(BUILD_TESTS "Build test programs" ON) option(BUILD_TESTS "Build test programs" ON)
add_library(uml STATIC source/Vector3.cpp) add_library(omath STATIC source/Vector3.cpp)
add_subdirectory(source) add_subdirectory(source)
add_subdirectory(extlibs) add_subdirectory(extlibs)
add_subdirectory(tests) add_subdirectory(tests)
target_include_directories(uml PUBLIC include) target_include_directories(omath PUBLIC include)

View File

@@ -4,7 +4,7 @@
#pragma once #pragma once
namespace uml namespace omath
{ {
class Vector3 { class Vector3 {
public: public:
@@ -57,12 +57,18 @@ namespace uml
{ {
return *reinterpret_cast<type*>(this); return *reinterpret_cast<type*>(this);
} }
[[nodiscard]] Vector3 Cross(const Vector3 &v) const; [[nodiscard]] Vector3 Cross(const Vector3 &v) const;
[[nodiscard]] static Vector3 CreateVelocity(float pitch, float yaw, float speed); [[nodiscard]] static Vector3 CreateVelocity(float pitch, float yaw, float speed);
[[nodiscard]] float Sum() const; [[nodiscard]] float Sum() const;
[[nodiscard]] float Sum2D() const; [[nodiscard]] float Sum2D() const;
[[nodiscard]] Vector3 ViewAngleTo(const Vector3& other) const; [[nodiscard]] Vector3 ViewAngleTo(const Vector3& other) const;
[[nodiscard]] static Vector3 ForwardVector(float pitch, float yaw);
[[nodiscard]] static Vector3 RightVector(float pitch, float yaw, float roll);
[[nodiscard]] static Vector3 UpVector(float pitch, float yaw, float roll);
[[nodiscard]] [[nodiscard]]
Vector3 Normalized() const; Vector3 Normalized() const;
}; };

View File

@@ -3,9 +3,9 @@
// //
#pragma once #pragma once
#include <uml/Vector3.h> #include <omath/Vector3.h>
namespace uml namespace omath
{ {
class Vector4 : public Vector3 class Vector4 : public Vector3
{ {

11
include/omath/angles.h Normal file
View File

@@ -0,0 +1,11 @@
//
// Created by vlad on 11/6/23.
//
#pragma once
namespace omath::angles
{
[[nodiscard]] constexpr float RadiansToDegrees(float rads);
[[nodiscard]] constexpr float DegreesToRadians(float degrees);
}

View File

@@ -4,12 +4,12 @@
#pragma once #pragma once
#include "uml/Vector3.h" #include "omath/Vector3.h"
#include <cstdint> #include <cstdint>
#include "uml/Vector4.h" #include "omath/Vector4.h"
namespace uml::color namespace omath::color
{ {
struct HSV struct HSV
{ {

View File

@@ -4,7 +4,7 @@
#include <string> #include <string>
namespace uml namespace omath
{ {
class Vector3; class Vector3;

View File

@@ -5,12 +5,12 @@
#pragma once #pragma once
#include <optional> #include <optional>
#include "uml/Vector3.h" #include "omath/Vector3.h"
#include "uml/prediction/Projectile.h" #include "omath/prediction/Projectile.h"
#include "uml/prediction/Target.h" #include "omath/prediction/Target.h"
namespace uml::prediction namespace omath::prediction
{ {
class Engine class Engine
{ {

View File

@@ -3,10 +3,10 @@
// //
#pragma once #pragma once
#include "uml/Vector3.h" #include "omath/Vector3.h"
namespace uml::prediction namespace omath::prediction
{ {
class Projectile final class Projectile final
{ {

View File

@@ -3,10 +3,10 @@
// //
#pragma once #pragma once
#include "uml/Vector3.h" #include "omath/Vector3.h"
namespace uml::prediction namespace omath::prediction
{ {
class Target final class Target final
{ {

View File

@@ -1,11 +0,0 @@
//
// Created by vlad on 11/6/23.
//
#pragma once
namespace uml::angles
{
[[nodiscard]] float RadiansToDegrees(float rads);
[[nodiscard]] float DegreesToRadians(float degrees);
}

View File

@@ -1,7 +1,7 @@
# Universal Math Library (UML) # Oranges's Math Library (omath)
## Overview ## Overview
The Universal Math Library (UML) 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.
## Features ## Features
- **Efficiency**: Optimized for performance, ensuring quick computations. - **Efficiency**: Optimized for performance, ensuring quick computations.
@@ -31,25 +31,25 @@ The Universal Math Library (UML) is a comprehensive, open-source library aimed a
## Usage ## Usage
Simple world to screen function Simple world to screen function
```c++ ```c++
std::optional<uml::Vector3> WorldToScreen(uml::Vector3 worldPosition, float width, float height) std::optional<omath::Vector3> WorldToScreen(omath::Vector3 worldPosition, float width, float height)
{ {
auto projected = (GetViewProjectionMatrix() * worldPosition).transpose(); auto projected = (GetViewProjectionMatrix() * worldPosition).transpose();
projected /= projected.at(0, 3); projected /= projected.at(0, 3);
const auto out = projected * uml::matrix::to_screen_matrix(width, const auto out = projected * omath::matrix::to_screen_matrix(width,
height); height);
if (out.at(0, 2) <= 0.f) if (out.at(0, 2) <= 0.f)
return std::nullopt; return std::nullopt;
auto final = uml::Vector3(out.at(0,0), auto final = omath::Vector3(out.at(0, 0),
out.at(0, 1), out.at(0, 1),
out.at(0,2)); out.at(0, 3));
return {final}; return {final};
} }
``` ```
## Contributing ## Contributing
Contributions to UML 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 GPL V3 - see the `LICENSE` file for details. This project is licensed under the GPL V3 - see the `LICENSE` file for details.

View File

@@ -1,4 +1,4 @@
target_sources(uml PRIVATE target_sources(omath PRIVATE
Vector3.cpp Vector3.cpp
matrix.cpp matrix.cpp
angles.cpp angles.cpp

View File

@@ -2,11 +2,11 @@
// Created by vlad on 10/28/23. // Created by vlad on 10/28/23.
// //
#include <uml/Vector3.h> #include <omath/Vector3.h>
#include <cmath> #include <cmath>
#include <uml/angles.h> #include <omath/angles.h>
namespace uml namespace omath
{ {
bool Vector3::operator==(const Vector3 &src) const bool Vector3::operator==(const Vector3 &src) const
{ {
@@ -211,6 +211,35 @@ namespace uml
}; };
} }
Vector3 Vector3::ForwardVector(const float pitch, const float yaw)
{
const auto cosPitch = std::cos(angles::DegreesToRadians(pitch));
const auto sinPitch = std::sin(angles::DegreesToRadians(pitch));
const auto cosYaw = std::cos(angles::DegreesToRadians(yaw));
const auto sinYaw = std::sin(angles::DegreesToRadians(yaw));
return {cosPitch*cosYaw, cosPitch*sinYaw, sinPitch};
}
Vector3 Vector3::RightVector(const float pitch, const float yaw, const float roll)
{
const auto cosPitch = std::cos(angles::DegreesToRadians(pitch));
const auto sinPitch = std::sin(angles::DegreesToRadians(pitch));
const auto cosYaw = std::cos(angles::DegreesToRadians(yaw));
const auto sinYaw = std::sin(angles::DegreesToRadians(yaw));
const auto cosRoll = std::cos(angles::DegreesToRadians(yaw));
const auto sinRoll = std::sin(angles::DegreesToRadians(yaw));
return {-sinRoll*sinPitch*cosYaw + -cosRoll*-sinYaw,
-sinRoll*sinPitch*sinYaw + -cosRoll*cosYaw,
sinRoll*cosPitch};
}
Vector3 Vector3::Cross(const Vector3 &v) const Vector3 Vector3::Cross(const Vector3 &v) const
{ {
return { return {

View File

@@ -2,12 +2,12 @@
// Vector4.cpp // Vector4.cpp
// //
#include "uml/Vector4.h" #include "omath/Vector4.h"
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
namespace uml namespace omath
{ {
bool Vector4::operator==(const Vector4& src) const bool Vector4::operator==(const Vector4& src) const
{ {

View File

@@ -2,18 +2,18 @@
// Created by vlad on 11/6/23. // Created by vlad on 11/6/23.
// //
#include "uml/angles.h" #include "omath/angles.h"
#include <numbers> #include <numbers>
namespace uml::angles namespace omath::angles
{ {
float RadiansToDegrees(const float radiands) constexpr float RadiansToDegrees(const float radiands)
{ {
return radiands * (180.f / std::numbers::pi_v<float>); return radiands * (180.f / std::numbers::pi_v<float>);
} }
float DegreesToRadians(const float degrees) constexpr float DegreesToRadians(const float degrees)
{ {
return degrees * (std::numbers::pi_v<float> / 180.f); return degrees * (std::numbers::pi_v<float> / 180.f);
} }

View File

@@ -2,12 +2,12 @@
// Created by vlad on 2/4/24. // Created by vlad on 2/4/24.
// //
#include "uml/color.h" #include "omath/color.h"
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
namespace uml::color namespace omath::color
{ {
Vector3 Blend(const Vector3 &first, const Vector3 &second, float ratio) Vector3 Blend(const Vector3 &first, const Vector3 &second, float ratio)
{ {

View File

@@ -3,17 +3,17 @@
* Created by Alpatov Softworks with love in Russia. * Created by Alpatov Softworks with love in Russia.
*/ */
#include "uml/matrix.h" #include "omath/matrix.h"
#include <format> #include <format>
#include "uml/Vector3.h" #include "omath/Vector3.h"
#include <utility> #include <utility>
#include <stdexcept> #include <stdexcept>
#include <utility> #include <utility>
namespace uml namespace omath
{ {
matrix::matrix(const size_t rows, const size_t columns) matrix::matrix(const size_t rows, const size_t columns)
{ {

View File

@@ -1 +1 @@
target_sources(uml PRIVATE Engine.cpp Projectile.cpp Target.cpp) target_sources(omath PRIVATE Engine.cpp Projectile.cpp Target.cpp)

View File

@@ -3,15 +3,15 @@
// //
#include "uml/prediction/Engine.h" #include "omath/prediction/Engine.h"
#include <cmath> #include <cmath>
#include <uml/angles.h> #include <omath/angles.h>
namespace uml::prediction namespace omath::prediction
{ {
Engine::Engine(const float gravityConstant, const float simulationTimeStep, Engine::Engine(const float gravityConstant, const float simulationTimeStep,
const float maximumSimulationTime, float distanceTolerance) const float maximumSimulationTime, const float distanceTolerance)
: m_gravityConstant(gravityConstant), : m_gravityConstant(gravityConstant),
m_simulationTimeStep(simulationTimeStep), m_simulationTimeStep(simulationTimeStep),
m_maximumSimulationTime(maximumSimulationTime), m_maximumSimulationTime(maximumSimulationTime),

View File

@@ -2,11 +2,11 @@
// Created by Vlad on 6/9/2024. // Created by Vlad on 6/9/2024.
// //
#include "uml/prediction/Projectile.h" #include "omath/prediction/Projectile.h"
#include <cmath> #include <cmath>
namespace uml::prediction namespace omath::prediction
{ {
Vector3 Projectile::CalculateVelocity(const float pitch, const float yaw) const Vector3 Projectile::CalculateVelocity(const float pitch, const float yaw) const
{ {

View File

@@ -2,11 +2,11 @@
// Created by Vlad on 6/9/2024. // Created by Vlad on 6/9/2024.
// //
#include "uml/prediction/Target.h" #include "omath/prediction/Target.h"
#include <cmath> #include <cmath>
namespace uml::prediction namespace omath::prediction
{ {
Vector3 Target::PredictPosition(const float time, const float gravity) const Vector3 Target::PredictPosition(const float time, const float gravity) const
{ {

View File

@@ -6,4 +6,4 @@ file(GLOB TEST_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
include(GoogleTest) include(GoogleTest)
add_executable(unit-tests UnitTestColor.cpp UnitTestMatrix.cpp) add_executable(unit-tests UnitTestColor.cpp UnitTestMatrix.cpp)
target_link_libraries(unit-tests PRIVATE gtest gtest_main uml) target_link_libraries(unit-tests PRIVATE gtest gtest_main omath)

View File

@@ -1,11 +1,11 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <uml/prediction/Engine.h> #include <omath/prediction/Engine.h>
TEST(x,x) TEST(x,x)
{ {
uml::prediction::Target target{.m_origin = {100, 0, 60}, .m_velocity = {0, 0, 0}, .m_isAirborne = false}; omath::prediction::Target target{.m_origin = {100, 0, 60}, .m_velocity = {0, 0, 0}, .m_isAirborne = false};
uml::prediction::Projectile proj = {.m_origin = {3,2,1}, .m_launchSpeed = 5000, .m_gravityScale= 0.4}; omath::prediction::Projectile proj = {.m_origin = {3,2,1}, .m_launchSpeed = 5000, .m_gravityScale= 0.4};
auto vel = uml::prediction::Engine(400, 1.f / 1000.f, 50, 5.f).MaybeCalculateAimPoint(proj, target); auto vel = omath::prediction::Engine(400, 1.f / 1000.f, 50, 5.f).MaybeCalculateAimPoint(proj, target);
auto pitch = proj.m_origin.ViewAngleTo(vel.value()).x; auto pitch = proj.m_origin.ViewAngleTo(vel.value()).x;

View File

@@ -2,13 +2,13 @@
// Created by vlad on 5/18/2024. // Created by vlad on 5/18/2024.
// //
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <uml/matrix.h> #include <omath/matrix.h>
#include <print> #include <print>
TEST(UnitTestMatrix, ToString) TEST(UnitTestMatrix, ToString)
{ {
uml::matrix matrix(2, 2); omath::matrix matrix(2, 2);
matrix.set(1.1); matrix.set(1.1);
const auto str = matrix.to_string(); const auto str = matrix.to_string();