Git Product home page Git Product logo

eseed-math's Introduction

eseed math

namespace esd::math OR namespace esdm

Goal

This library aims to provide fast, flexible, and modern vector, matrix, and quaternion functions. constexpr is used everywhere possible, including constructors and operators, to maximize compile-time optimizations. As this is intended to be a modern library, and will likely be under active development for some time, C++20 has been chosen as the language standard as its concepts allow for much cleaner template code. There is no intention to support obscure or old compilers, however, all code should be standard compliant.

This project began as part of a game engine, and is designed primarily with game programming in mind.

Usage

This is a header only library. Simply include the include folder in your project.

Alternatively, link eseed_math in CMake:

add_subdirectory("path/to/eseed_math/")
target_link_libraries(target eseed_math)

Quick introduction

#include <iostream>
#include <eseed/math/vecops.hpp>
#include <eseed/math/matops.hpp>

int main() {
    esdm::Vec3<float> a(1, 2, 3);
    esdm::Vec3<float> b(4, 5, 6);

    std::cout << "a: " << a << std::endl;
    std::cout << "b: " << b << std::endl;

    esdm::Vec4<float> point(5, 0, 0, 1);
    esdm::Mat4<float> rotation = esdm::matrot(esdm::Vec3<float>(0, 1, 0), esdm::pi<float>() * 0.5f);

    std::cout << "point: " << point << std::endl;
    std::cout << "rotation: " << rotation << std::endl;
    
    point *= rotation;

    std::cout << "rotated point: " << point << std::endl;
}

Full feature list

Scalar functions

Full commented header

  • Special floating point values
    • Infinity
      • Constant
      • Check
    • NaN
      • Quiet constant
      • Signaling constant
      • Check
    • Constants
      • Pi
  • General functions
    • Absolute value
    • Square
    • Square root
    • Power
  • Rounding
    • Truncate
    • Floor
    • Ceil
    • Round
  • Direct-to-integer rounding
    • Truncate to int
    • Floor to int
    • Ceil to int
    • Round to int

Vector class

Full commented header

  • Templated with length and type
    • esdm::Vec<std::size_t L, typename T>
  • Common-sized aliases
    • esdm::Vec1<typename T>
    • esdm::Vec2<typename T>
    • esdm::Vec3<typename T>
    • esdm::Vec4<typename T>
  • Constructors
    • Default
      • esdm::Vec3<float>() = [0, 0, 0]
    • Component-wise
      • esdm::Vec3<float>(x, y) = [x, y, 0]
      • esdm::Vec3<float>(x, y, z) = [x, y, z]
    • Copy constructor
      • esdm::Vec3<float>(otherFloatVec3 /* [1.f, 2.f, 3.f] */) = [1.f, 2.f, 3.f]
      • esdm::Vec3<float>(otherIntVec3 /* [1, 2, 3] */) = [1.f, 2.f, 3.f]
      • esdm::Vec3<float>(otherDoubleVec2 /* [0.5, 1.0] */) = [0.5f, 1.f]
  • Operators (where applicable)
    • Subscript
      • []
        • vec[i]
        • Value and reference
    • Comparison
      • ==
        • vec == vec
    • Component-wise post and pre increment and decrement
      • ++ --
        • vec++
        • ++vec
    • Component-wise unary
      • + - ! ~
        • -vec
    • Component-wise binary
      • + - * / % & | ^ << >> && ||
        • vec + vec
        • vec + number
        • number + vec
    • Component-wise assignment
      • += -= *= /= %= &= |= ^= <<= >>=
        • vec += vec
        • vec += number
    • ostream
      • <<
        • std::cout << aVec3 << std::endl; prints in format "[x, y, z]"
  • Named component accessors
    • Spatial components
      • x, y, z, w
    • Color components
      • r, g, b, a
    • Texture coord components
      • u, v
    • get_() - retrieve component, constexpr compatible
      • vec.getX()
    • set_(n) - set a component
      • vec.setX(5)
    • _() - retrieve reference to component
      • vec.x() = 5

Vector Functions

Full commented header

  • Special floating point values
    • Infinity
      • Check all components
      • Check any component
    • NaN
      • Check all components
      • Check any component
  • General component-wise functions
    • Absolute value
    • Square
    • Square root
    • Power
  • General vector functions
    • Dot product
    • Cross product
  • Component-wise rounding
    • Truncate
    • Floor
    • Ceil
    • Round
  • Component-wise direct-to-integer rounding
    • Truncate to int
    • Floor to int
    • Ceil to int
    • Round to int

Matrix Class

Full commented header

  • Templated with column size, row size, and type
    • esdm::Mat<std::size_t M, std::size_t N, typename T>
  • Stored column-major
    • Important! When assigning components to a matrix, make sure the components are in a column-major format
  • Shorthands for common sizes
    • Any column and row size up to 4 as esdm::Mat[M]x[N]<T>
      • e.g. esdm::Mat2x4<T>, esdm::Mat3x3<T>
    • Shorter-hand for square matrix as esdm::Mat[L]<T>
      • e.g. esdm::Mat4<T>
  • Constructors
    • Default
      • esdm::Mat2<float>() = [[0, 0], [0, 0]]
    • Component-wise
      • esdm::Mat2<float>(1, 2, 3, 4) = [[1, 2], [3, 4]]
  • Column and row getters
  • Operators
    • Subscript
      • []
        • mat[i]
        • Value and reference
        • Returns a column vector
    • Comparison
      • ==
        • mat == mat
    • Component-wise post and pre increment and decrement
      • ++ --
        • mat++
        • ++mat
    • Component-wise unary
      • + - ! ~
        • -mat
    • Component-wise binary
      • + - * / % & | ^ << >> && ||
        • mat + mat (+ - only)
        • mat + number
        • number + mat
    • Component-wise assignment
      • += -= *= /= %= &= |= ^= <<= >>=
        • mat += mat (+= -= only)
        • mat += number
    • Matrix multiplication
      • *
        • mat * mat
        • mat * vec
        • vec * mat
    • ostream
      • <<
        • std::cout << aMat2 << std::endl; prints in format "[[0, 1], [2, 3]]"

Matrix functions

Full commented header

  • Builders
    • Identity
  • General functions
    • Inverse
    • Matrix multiplication
      • Matrix * matrix
      • Matrix * row vector
      • Column vector * matrix
  • Matrix generation
    • Translation
    • Rotation

eseed-math's People

Contributors

elijaharita avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.