Fast and primitive based math library.
Originally it was a part of generative art/glich Clojure2d library.
[generateme/fastmath "1.0.0"]
HERE
Code adopted from Zach Tellmans' library.
[* + - / > < >= <= == rem quot mod bit-or bit-and bit-xor bit-not bit-shift-left bit-shift-right unsigned-bit-shift-right inc dec zero? neg? pos? min max even? odd? bool-and bool-or bool-xor bool-not << >> >>> not==]
- Trigonometric functions
- Power: log, ln, logb, exp, pow, sqrt
- Rounding functions: round, floor, ceil, trunc, frac, approx + other
- Normalizations: norm wrap, constrain
- Interpolations: lerp, cos-interpolation, smooth-interpolation, quad-interpolation, smoothstep
- Special functions: erf, beta, gamma + other
- Distance: dist, hypot
- Sign: sgn, signum, abs
- Other: gcd
Most of them backed by Jafama FastMath 2.3.1 or Apache Commons Math 3.6.1
- 2d (
Vec2
), 3d (Vec3
) and 4d (Vec4
) vector types. - ArrayVector for fixed length long vectors (fixed sized double-array)
- Clojure vector
With following groups of functions:
- Basic linear operations: add, mult, div, sub, dot, cross, hadamard product
- mag, magsq, heading, angle-between, limit, normalize
- rotations (2d,3d)
- translations (2d, 3d)
- various distances
- centroid, interpolations
- and other
- primitive operations: mult, div, add, sub
- abs, arg, conjugate, reciprocal, neg
- atan, asin, acos, csc, sec, tanh, tan, sinh, sin, cosh, cos
- log, exp, pow
- sqrt, sq, sqrt1z
- Collection of random number generators
- Collection of distributions (count: 28)
- Random generator functions for each primitive type (drand - double, lrand - long, frand - float, irand - int)
- Additional RNG functions: brand - true/false, grand - gaussian distributed double
- Random sequences: from distribution, halton, sobol, sphere, uniform
- 4 noise types: value, gradient, simplex, discrete
- 3 noise blends: fbm, ridgedmulti, billow
- Ready to use fbm functions: noise (perlin), vnoise (value noise), simplex
- Descriptive statistics: size, min, max, mode, mean, median, percentiles, kurtosis, skewness, IQR, LAV, UAV and other
- Correlations
1d, 2d interpolations
Several easing functions (in, out, in-out)
- Wavelets: 1d, 2d (haar, biorthogonal, symlet, coiflet, daubechies, legendre)
- 1d Fast Sine, Cosine and Hadamard
Great collection (100+) of R^2->R^2 functions.
Plenty of constant values
Almost all functions optimized to work on double
and long
primitives
Since this library is only JVM version, you can check following Clojure/ClojureScript libraries as replacement
- PrimitiveMath - for primitive operators
- Kixi stats - for pure clj(s) statistics/distributions (tends to be 2-10x slower)
- thi.ng - for vectors, general math, noise, complex numbers, transforms (fourier)
- vectorz-clj - fast vector operations
- Incanter - statistics/distributions/probability
Java classes are compiled for java 1.8
- Change images to plots with axes
- More tests
- Move vector fields
If you see place of improvement, I'm accepting PRs.
The Unlicence