smath logo

Build License: Apache-2.0 C++23

## Quick Start Create `main.cpp`: ```cpp #include #include int main() { using namespace smath; Vec3 a{1.0f, 2.0f, 3.0f}; Vec3 b{3.0f, 2.0f, 1.0f}; std::println("a + b = {}", a + b); std::println("dot(a, b) = {}", a.dot(b)); std::println("normalized(a) = {}", a.normalized()); } ``` Build and run: ```bash g++ -std=c++23 -Iinclude main.cpp -o quickstart ./quickstart ``` ## Features - Generic `Vec` class with useful aliases `Vec2/Vec3/Vec4` and friendly accessors (`x/y/z/w`, `r/g/b/a`). They support approx-equal and tuple/structured bindings. - `std::format` support. - Compile-time swizzles via `swizzle<"...">`. - Generic matrix `Mat` class with useful aliases `Mat2/Mat3/Mat4`. - `Quaternion` built on `Vec4`. - Angle helpers `rad/deg/turns` respecting a configurable base unit via the macro `SMATH_ANGLE_UNIT`. - Optional implicit conversions. - Packing utilities for normalized RGBA (`pack_unorm4x8`, `unpack_snorm4x8`, etc.). - C++20 modules support. ## License This library is licensed under the Apache License 2.0. See the [LICENSE.txt](LICENSE.txt) file for more details.