Library for extremely lightweight vector and matrix operations.
To use this package, run the following command in your project's root directory:
Put the following dependency into your project's dependences section:
dvec - Easy linear algebra for D
dvec is a library that offers vector and matrix data structures and functions in a way that's intuitive, easy to use, tested, and well-documented. It takes advantage of the D language's advanced templating system and compile-time code-generation to help optimize performance and type safety.
dvec offers the basic linear algebra primitives:
Each of these can be of any desired integer size (within the limits of your system). For example,
Vec!(float, 5) v; defines a 5-dimensional floating-point vector, and
Mat!(int, 2, 3) m; defines a 2x3 (2 rows by 3 columns) integer matrix. However, this can get to be a bit tedious, so we've included the most common vectors and matrices as aliases for you:
- 2, 3, and 4-dimensional vectors of float, double, and int types:
Vec4f, for example.
- 2, 3, and 4-dimensional square matrices of float and double types:
Mat4d, for example.
Each primitive is a simple struct with a fully transparent internal structure, and implements all the basic arithmetic operators, so you can do things like this easily:
Vec3f v = Vec3f(1f, 2f, 3f) * 5 - Vec3f(0.5f); // v.data == [4.5f, 9.5f, 14.5f]
Besides the `toString()` methods, no parts of this library make use of the GC, and are thus
Certain vector types get access to extra special functions:
- Any floating-point (float, double) vector supports the
norm()method, to normalize the vector to a unit vector of length 1.
- Any floating-point (float, double) 2-dimensional vector supports the
toCartesian()methods, so that the vector can be treated as polar or cartesian coordinates and converted between the two.
- Any floating-point (float, double) 3-dimensional vector supports the
cross()method for computing the cross product with another 3-dimensional vector.
Certain matrix types get access to extra special functions:
- Square matrices (NxM matrices where N = M) support a variety of additional methods that are useful for linear algebra, like
inv()(inverse), and so on.
- 3x3 matrices support linear transformation methods in 2 dimensions, like translation, rotation, skew, and scaling.
- 4x4 matrices support linear transformation methods in 3 dimensions.
For more information, please see dub project page and its associated documentation.
A lot of effort has gone into making sure everything in this library is well-documented and explained well. If you find that documentation is missing or insufficient for a certain part, please make an issue on GitHub!
- Registered by Andrew Lalis
- 0.0.5 released a year ago
- Copyright © 2022, Andrew Lalis