fastmath.vector
Mathematical vector operations.
Types
- Fixed size (custom types):
- Fixed size
- doubles - double array itself
- Variable size:
- Clojure’s IPersistentVector, creator
[]
- Clojure’s ISeq
- Clojure’s IPersistentVector, creator
VectorProto defines most of the functions.
Vectors implements also:
Sequable
Sequencial
IFn
Counted
Reversible
Indexed
ILookup
equals
andtoString
fromObject
IPersistentVector
Associative
clojure.core.matrix.protocols
That means that vectors can be destructured, treated as sequence or called as a function. See vec2 for examples.
Categories
- Distance / length: dist dist-abs dist-canberra dist-cheb dist-cos dist-discrete dist-emd dist-sq distances limit mag magsq normalize set-mag
- Creators: array->vec2 array->vec3 array->vec4 array-vec as-vec generate-vec2 generate-vec3 generate-vec4 make-vector seq->vec2 seq->vec3 seq->vec4 to-vec vec->Vec vec2 vec3 vec4
- Geometric: aligned? angle-between axis-rotate base-from cross dot faceforward from-polar heading mag magsq perpendicular relative-angle-between rotate to-polar transform
- Math operations: acos acosh acot acoth acsc asec asech asin asinh atan atanh cbrt ceil cos cosh cot coth csc csch degrees exp expm1 floor frac ln log log10 log1p log2 radians rint round safe-sqrt sec sech sfrac sgn sigmoid signum sin sinc sinh sq sqrt tan tanh trunc
- Operations: abs add applyf approx average-vectors clamp div econstrain ediv einterpolate emn emult emx fmap interpolate is-near-zero? is-zero? maxdim mindim mn mult mx nonzero-count permute reciprocal sub sum zero-count
Other vars: ->ArrayVec ->Vec2 ->Vec3 ->Vec4
abs
(abs v)
Absolute value of vector elements
Examples
Usage
(abs (array-vec [-1 2 -2 1]))
;;=> [1.0 2.0 2.0 1.0]
acos
(acos vector)
Apply acos to vector elements.
Examples
Usage
(acos (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.0471975511965976 ##NaN ##NaN 1.5707963267948966]
acosh
(acosh vector)
Apply acosh to vector elements.
Examples
Usage
(acosh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [##NaN ##NaN 1.37285914424258 ##NaN]
acot
(acot vector)
Apply acot to vector elements.
Examples
Usage
(acot (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.1071487177940904 2.5535900500422257 0.44441920990109884
;;=> 1.5707963267948966]
acoth
(acoth vector)
Apply acoth to vector elements.
Examples
Usage
(acoth (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [##NaN -0.8047189562170501 0.5180459658433878 ##NaN]
acsc
(acsc vector)
Apply acsc to vector elements.
Examples
Usage
(acsc (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [##NaN -0.7297276562269663 0.49631736212546657 ##NaN]
add
(add v)
(add v1 v2)
Sum of two vectors.
Examples
Usage
(add (vec2 1 2) (vec2 -1 -2))
;;=> [0.0 0.0]
aligned?
(aligned? v1 v2 tol)
(aligned? v1 v2)
Are vectors aligned (have the same direction)?
Examples
Usage
(aligned? (vec2 1.0 1.0) (vec2 2.0 2.000001))
;;=> true
(aligned? (vec2 1.0 1.0) (vec2 2.0 2.00001))
;;=> false
(aligned? (vec2 1.0 1.0) (vec2 2.0 2.00001) 0.001)
;;=> true
;; Test: ok.
angle-between
(angle-between v1 v2)
Angle between two vectors
See also relative-angle-between.
Examples
Usage
(m/degrees (angle-between (vec3 1.0 0.0 0.0) (vec3 0.0 1.0 0.0)))
;;=> 90.0
(m/degrees (angle-between (vec (repeatedly 50 rand))
(vec (repeatedly 50 rand))))
;;=> 37.315000765880214
applyf
deprecated in v1.3.0
Same as fmap. Deprecated.
Examples
Usage
(applyf [5 3] (fn [v] (m/sin v)))
;;=> [-0.9589242746631386 0.1411200080598671]
approx
(approx v)
(approx v d)
Round to 2 (or d
) decimal places
Examples
Usage
(approx (vec2 (m/sin -1) (m/cos 1)))
;;=> [-0.84 0.54]
(approx (vec2 (m/sin -1) (m/cos 1)) 6)
;;=> [-0.841471 0.540302]
array->vec2
(array->vec2 arr)
Doubles array to Vec2
Examples
Usage
(array->vec2 (double-array [11 22 33 44 55]))
;;=> [11.0 22.0]
array->vec3
(array->vec3 arr)
Doubles array to Vec3
Examples
Usage
(array->vec3 (double-array [11 22 33 44 55]))
;;=> [11.0 22.0 33.0]
array->vec4
(array->vec4 arr)
Doubles array to Vec4
Examples
Usage
(array->vec4 (double-array [11 22 33 44 55]))
;;=> [11.0 22.0 33.0 44.0]
array-vec
(array-vec xs)
Make ArrayVec type based on provided sequence xs
.
Examples
Usage
(array-vec [1 2 3 4 5 6 7])
;;=> [1.0 2.0 3.0 4.0 5.0 6.0 7.0]
(array-vec (range 0.0 1.0 0.25))
;;=> [0.0 0.25 0.5 0.75]
(array-vec 11)
;;=> [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0]
Operations
(nth (array-vec [9 8 7 6]) 2)
;;=> 7.0
(count (array-vec (range 0.1 1.0 0.05)))
;;=> 18
(seq (array-vec [1 2]))
;;=> (1.0 2.0)
as-vec
(as-vec v)
(as-vec v xs)
Create vector from sequence as given type. If there is no sequence fill with 0.0
.
Examples
Create vectors
(as-vec [1 2 3])
;;=> [0.0 0.0 0.0]
(as-vec [3 2 3] (repeat -10))
;;=> [-10 -10 -10]
(as-vec (vec3 1 2 3) (repeat -10))
;;=> [-10.0 -10.0 -10.0]
(type (as-vec (array-vec [1 1 11 2 3]) (repeat -10)))
;;=> class fastmath.vector.ArrayVec
asec
(asec vector)
Apply asec to vector elements.
Examples
Usage
(asec (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [##NaN 2.300523983021863 1.07447896466943 ##NaN]
asech
(asech vector)
Apply asech to vector elements.
Examples
Usage
(asech (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.3169578969248166 ##NaN ##NaN ##Inf]
asin
(asin vector)
Apply asin to vector elements.
Examples
Usage
(asin (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5235987755982989 ##NaN ##NaN 0.0]
asinh
(asinh vector)
Apply asinh to vector elements.
Examples
Usage
(asinh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.48121182505960347 -1.1947632172871094 1.4874828366412711 0.0]
atan
(atan vector)
Apply atan to vector elements.
Examples
Usage
(atan (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.4636476090008061 -0.9827937232473292 1.1263771168937977 0.0]
atanh
(atanh vector)
Apply atanh to vector elements.
Examples
Usage
(atanh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5493061443340548 ##NaN ##NaN 0.0]
average-vectors
(average-vectors init vs)
(average-vectors vs)
Average / centroid of vectors. Input: initial vector (optional), list of vectors
Examples
Usage
(average-vectors [[1 2] [0 1] [3 4] [1 2] [4 -1]])
;;=> [1.8 1.6]
(average-vectors (vec2 0 0) [(vec2 1 1) (vec2 1 1) (vec2 1 1)])
;;=> [0.75 0.75]
axis-rotate
(axis-rotate v angle axis)
(axis-rotate v angle axis pivot)
Rotate vector. Only for Vec3
types
Examples
Usage
(axis-rotate (vec3 1.0 0.0 0.0) m/HALF_PI (vec3 0.0 1.0 0.0))
;;=> [6.12323399538461E-17 0.0 -1.0]
(axis-rotate (vec3 1.0 0.0 0.0)
m/HALF_PI
(vec3 0.0 1.0 0.0)
(vec3 1.0 1.0 1.0))
;;=> [0.0 0.0 0.9999999999999999]
base-from
(base-from v)
List of perpendicular vectors (basis). Works only for Vec2
and Vec3
types.
Examples
Usage
(base-from (vec3 0.1 1.0 -1.0))
;;=> [[0.1 1.0 -1.0] [0.0 -0.7071067811865475 -0.7071067811865475]
;;=> [-1.414213562373095 0.07071067811865475 -0.07071067811865475]]
(base-from (vec2 1.0 0.0))
;;=> [[1.0 0.0] [-0.0 1.0]]
cbrt
(cbrt vector)
Apply cbrt to vector elements.
Examples
Usage
(cbrt (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.7937005259840997 -1.1447142425533319 1.2805791649874945 0.0]
ceil
(ceil vector)
Apply ceil to vector elements.
Examples
Usage
(ceil (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.0 -1.0 3.0 0.0]
clamp
(clamp v mn mx)
(clamp v)
Clamp elements.
Examples
Clamp
(clamp [-1 -2 -3 1 2 3])
;;=> [0.0 0.0 0.0 1.0 2.0 3.0]
(clamp [-1 -2 -3 1 2 3] -2.5 2.5)
;;=> [-1.0 -2.0 -2.5 1.0 2.0 2.5]
cos
(cos vector)
Apply cos to vector elements.
Examples
Usage
(cos (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.8775825618903728 0.07073720166770284 -0.5048461045998573 1.0]
cosh
(cosh vector)
Apply cosh to vector elements.
Examples
Usage
(cosh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.1276259652063807 2.3524096152432477 4.1443131704103155 1.0]
cot
(cot vector)
Apply cot to vector elements.
Examples
Usage
(cot (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.8304877217124518 -0.0709148443026525 -0.5848478064594647
;;=> 1.6331239354134602E16]
coth
(coth vector)
Apply coth to vector elements.
Examples
Usage
(coth (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [2.163953413738653 -1.104791392982512 1.0304477349900076 ##Inf]
cross
(cross v1 v2)
Cross product
Examples
Usage
(cross (vec3 1 2 3) (vec3 4 3 2))
;;=> [-5.0 10.0 -5.0]
(cross (vec2 1 2) (vec2 -1 2))
;;=> 4.0
csc
(csc vector)
Apply csc to vector elements.
Examples
Usage
(csc (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [2.0858296429334886 -1.0025113042467249 1.1584675035237058 ##Inf]
csch
(csch vector)
Apply csch to vector elements.
Examples
Usage
(csch (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.9190347513349437 -0.46964244059522453 0.24864137738123349 ##Inf]
Usage
(csch (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.9190347513349437 -0.46964244059522453 0.24864137738123349 ##Inf]
degrees
(degrees vector)
Apply degrees to vector elements.
Examples
Usage
(degrees (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [28.64788975654116 -85.94366926962348 120.32113697747289 0.0]
dist
(dist v1 v2)
Euclidean distance between vectors
Examples
Usage
(dist (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 8.246211251235321
(dist [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 5.477225575051661
dist-abs
(dist-abs v1 v2)
Manhattan distance between vectors
Examples
Usage
(dist-abs (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 14.0
(dist-abs [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 10.0
dist-canberra
(dist-canberra v1 v2)
Canberra distance
Examples
Usage
(dist-canberra (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 3.0
(dist-canberra [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 1.4563492063492063
dist-cheb
(dist-cheb v1 v2)
Chebyshev distance between 2d vectors
Examples
Usage
(dist-cheb (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 6.0
(dist-cheb [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 4.0
dist-cos
(dist-cos v1 v2)
Cosine distance
Examples
Usage
(dist-cos (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 1.8082903768654761
(dist-cos [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 0.041122268700070075
dist-discrete
(dist-discrete v1 v2)
Discrete distance between 2d vectors
Examples
Usage
(dist-discrete (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 3.0
(dist-discrete [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 4.0
dist-emd
(dist-emd v1 v2)
Earth Mover’s Distance
Examples
Usage
(dist-emd (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 4.0
(dist-emd [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 10.0
dist-sq
(dist-sq v1 v2)
Squared Euclidean distance between vectors
Examples
Usage
(dist-sq (vec4 1.0 2.0 -1.0 -2.0) (vec4 1.0 -2.0 3.0 4.0))
;;=> 68.0
(dist-sq [9 8 7 6 5 4 3 2 1] [9 8 7 6 5 5 5 5 5])
;;=> 30.0
distances
Examples
List of distances
(sort (keys distances))
;;=> (:abs :canberra :cheb :cosine :discrete :emd :euclid :euclid-sq)
div
(div v1 v)
(div v1)
Vector division or reciprocal.
Examples
Usage
(div [5 4 3 5] 4.0)
;;=> [1.25 1.0 0.75 1.25]
Applied to vector is reciprocal
(div [1 2 4 -5])
;;=> [1.0 0.5 0.25 -0.2]
dot
(dot v1 v2)
Dot product of two vectors.
Examples
Usage
(dot (vec4 1 0 0 0) (vec4 -1 0 -1 0))
;;=> -1.0
econstrain
(econstrain v mn mx)
Element-wise constrain
Examples
Usage
(econstrain (vec3 2 0 -2) -1 1)
;;=> [1.0 0.0 -1.0]
ediv
(ediv v1 v2)
Element-wise division of two vectors.
Examples
Usage
(ediv (vec2 1 3) (vec2 2 4))
;;=> [0.5 0.75]
einterpolate
(einterpolate v1 v2 v)
(einterpolate v1 v2 v f)
Interpolate vector selement-wise, optionally set interpolation fn (default: lerp)
Examples
Usage
(einterpolate (vec2 -1 -1) (vec2 1 1) (vec2 0.25 0.75))
;;=> [-0.5 0.5]
(einterpolate (vec2 -1 -1)
(vec2 1 1)
(vec2 0.25 0.75)
m/smooth-interpolation)
;;=> [-0.6875 0.6875]
emn
(emn v1 v2)
Element-wise min from two vectors.
Examples
Usage
(emn [-1 2] [1 -2])
;;=> [-1.0 -2.0]
emult
(emult v1 v2)
Element-wise vector multiplication (Hadamard product).
Examples
Usage
(emult (vec3 1 2 3) (vec3 9 9 9))
;;=> [9.0 18.0 27.0]
emx
(emx v1 v2)
Element-wise max from two vectors.
Examples
Usage
(emx [-1 2] [1 -2])
;;=> [1.0 2.0]
exp
(exp vector)
Apply exp to vector elements.
Examples
Usage
(exp (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.6487212707001282 0.22313016014842985 8.16616991256765 1.0]
expm1
(expm1 vector)
Apply expm1 to vector elements.
Examples
Usage
(expm1 (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.6487212707001282 -0.7768698398515701 7.16616991256765 0.0]
faceforward
(faceforward n v)
Flip normal n
to match the same direction as v
.
Examples
Usage
(faceforward (vec2 1.0 1.0) (vec2 -1.0 -3.0))
;;=> [-1.0 -1.0]
(faceforward (vec2 1.0 1.0) (vec2 1.0 0.0))
;;=> [1.0 1.0]
floor
(floor vector)
Apply floor to vector elements.
Examples
Usage
(floor (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.0 -2.0 2.0 0.0]
fmap
(fmap v f)
Apply function to all vector values (like map but returns the same type).
Examples
Usage
(fmap [5 3] (fn [v] (m/sin v)))
;;=> [-0.9589242746631386 0.1411200080598671]
frac
(frac vector)
Apply frac to vector elements.
Examples
Usage
(frac (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5 0.5 0.10000000000000009 0.0]
from-polar
(from-polar v)
From polar coordinates (2d, 3d only)
Examples
Usage
(from-polar (vec2 1.0 (m/radians 90)))
;;=> [6.12323399538461E-17 1.0]
(from-polar (vec3 1.0 (m/radians 90) (m/radians 45)))
;;=> [0.7071067811865476 0.7071067811865475 6.12323399538461E-17]
generate-vec2
(generate-vec2 f1 f2)
(generate-vec2 f)
Generate Vec2 with fn(s)
Examples
Usage
(generate-vec2 (constantly 2))
;;=> [2.0 2.0]
(generate-vec2 rand (constantly 1))
;;=> [0.41196020229939334 1.0]
generate-vec3
(generate-vec3 f1 f2 f3)
(generate-vec3 f)
Generate Vec3 with fn(s)
Examples
Usage
(generate-vec3 rand)
;;=> [0.4911716614578937 0.25651196728341885 0.5174201728638851]
(generate-vec3 rand (constantly 1) (constantly 2))
;;=> [0.1006873945716541 1.0 2.0]
generate-vec4
(generate-vec4 f1 f2 f3 f4)
(generate-vec4 f)
Generate Vec4 with fn(s)
Examples
Usage
(generate-vec4 rand)
;;=> [0.2169017484507748 0.04775186263274933 0.6762406025352719
;;=> 0.9367268305309476]
(generate-vec4 rand rand (constantly 1) (constantly 2))
;;=> [0.07321303288594527 0.08482579512040855 1.0 2.0]
heading
(heading v)
Angle between vector and unit vector [1,0,...]
Examples
Usage
(m/degrees (heading (vec2 1.0 1.0)))
;;=> 45.0
(m/degrees (heading (vec3 1.0 0.0 1.0)))
;;=> 45.0
(m/degrees (heading (vec4 1.0 -1.0 1.0 -1.0)))
;;=> 59.99999999999999
(heading [1 2 3 4 5 6 7 8 9])
;;=> 1.5115267439240436
(heading (array-vec [1 2 3 4 5 6 7 8 9]))
;;=> 1.5115267439240436
interpolate
(interpolate v1 v2 t)
(interpolate v1 v2 t f)
Interpolate vectors, optionally set interpolation fn (default: lerp)
Examples
Usage
(interpolate (vec2 -1 -1) (vec2 1 1) 0.25)
;;=> [-0.5 -0.5]
(interpolate (vec2 -1 -1) (vec2 1 1) 0.25 m/smooth-interpolation)
;;=> [-0.6875 -0.6875]
is-near-zero?
(is-near-zero? v)
(is-near-zero? v tol)
Is vector almost zero? (all absolute values of elements are less than tol
tolerance or 1.0e-6
)
Examples
Usage
(is-near-zero? [0 1.0E-7])
;;=> true
(is-near-zero? [0 1.0E-6])
;;=> false
(is-near-zero? [0 1.0E-6] 1.0E-4)
;;=> true
;; Test: ok.
is-zero?
(is-zero? v)
Is vector zero?
Examples
Usage
(is-zero? [0 1.0E-7])
;;=> false
(is-zero? [0 0.0])
;;=> true
limit
(limit v len)
Limit length of the vector by given value
Examples
Usage
(limit (vec3 1.0 1.0 1.0) 1.0)
;;=> [0.5773502691896258 0.5773502691896258 0.5773502691896258]
(limit (vec3 1.0 1.0 1.0) 2.0)
;;=> [1.0 1.0 1.0]
ln
(ln vector)
Apply ln to vector elements.
Examples
Usage
(ln (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [-0.6931471805599453 ##NaN 0.7419373447293773 ##-Inf]
log
(log vector)
Apply log to vector elements.
Examples
Usage
(log (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [-0.6931471805599453 ##NaN 0.7419373447293773 ##-Inf]
log10
(log10 vector)
Apply log10 to vector elements.
Examples
Usage
(log10 (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [-0.3010299956639812 ##NaN 0.3222192947339193 ##-Inf]
log1p
(log1p vector)
Apply log1p to vector elements.
Examples
Usage
(log1p (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.4054651081081644 ##NaN 1.1314021114911006 0.0]
log2
(log2 vector)
Apply log2 to vector elements.
Examples
Usage
(log2 (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [-1.0 ##NaN 1.070389327891398 ##-Inf]
mag
(mag v)
Length of the vector.
Examples
Length of the vector
(mag (vec2 1 1))
;;=> 1.4142135623730951
;; Test: ok.
magsq
(magsq v)
Length of the vector squared.
Examples
Length of the vector, squared
(magsq [1 2 1 2])
;;=> 10.0
;; Test: ok.
make-vector
(make-vector dims xs)
(make-vector dims)
Returns fixed size vector for given number of dimensions.
Proper type is used.
Examples
Usage
(make-vector 2)
;;=> [0.0 0.0]
(make-vector 2 (cycle [1 2 3]))
;;=> [1.0 2.0]
(make-vector 3)
;;=> [0.0 0.0 0.0]
(make-vector 3 (cycle [1 2 3]))
;;=> [1.0 2.0 3.0]
(make-vector 4)
;;=> [0.0 0.0 0.0 0.0]
(make-vector 4 (cycle [1 2 3]))
;;=> [1.0 2.0 3.0 1.0]
(make-vector 6)
;;=> [0.0 0.0 0.0 0.0 0.0 0.0]
(make-vector 6 (cycle [1 2 3]))
;;=> [1.0 2.0 3.0 1.0 2.0 3.0]
(type (make-vector 6))
;;=> class fastmath.vector.ArrayVec
maxdim
(maxdim v)
Index of maximum value.
Examples
Usage
(let [v (vec (repeatedly 100 (fn [] (- (int (rand-int 200)) 100))))
mdim (maxdim v)]
[mdim (v mdim)])
;;=> [0 98]
(maxdim (vec3 1 2 3))
;;=> 2
mindim
(mindim v)
Index of minimum value.
Examples
Usage
(let [v (vec (repeatedly 100 (fn [] (- (int (rand-int 200)) 100))))
mdim (mindim v)]
[mdim (v mdim)])
;;=> [14 -100]
(mindim (vec3 1 2 3))
;;=> 0
mult
(mult v x)
Multiply vector by number x
.
Examples
Usage
(mult (vec4 5 4 3 5) 4.0)
;;=> [20.0 16.0 12.0 20.0]
nonzero-count
(nonzero-count v)
Count non zero velues in vector
Examples
Usage
(nonzero-count [1 2 3 -1 0 2 0 0])
;;=> 5
normalize
(normalize v)
Normalize vector (set length = 1.0)
Examples
Usage
(normalize (vec2 1.0 -1.0))
;;=> [0.7071067811865475 -0.7071067811865475]
permute
(permute v idxs)
Permute vector elements with given indices.
Examples
Usage
(permute (vec4 1 2 3 4) (vec4 0 3 2 1))
;;=> [1.0 4.0 3.0 2.0]
perpendicular
(perpendicular v)
(perpendicular v1 v2)
Perpendicular vector. Only for Vec2
and Vec3
types.
Examples
Usage
(perpendicular (vec2 -4 0))
;;=> [-0.0 -1.0]
(perpendicular (vec3 1.0 0.0 0.0) (vec3 0.0 -1.0 0.0))
;;=> [0.0 0.0 -1.0]
radians
(radians vector)
Apply radians to vector elements.
Examples
Usage
(radians (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.008726646259971648 -0.026179938779914945 0.03665191429188092 0.0]
reciprocal
(reciprocal v)
Reciprocal of elements.
Examples
Usage
(reciprocal (vec3 1 2 5))
;;=> [1.0 0.5 0.2]
relative-angle-between
(relative-angle-between v1 v2)
Angle between two vectors relative to each other.
See also angle-between.
Examples
Usage
(m/degrees (relative-angle-between (vec3 1.0 0.0 0.0)
(vec3 0.0 1.0 0.0)))
;;=> 90.0
(m/degrees (relative-angle-between (vec (repeatedly 50 rand))
(vec (repeatedly 50 rand))))
;;=> -0.5816654163822097
rint
(rint vector)
Apply rint to vector elements.
Examples
Usage
(rint (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.0 -2.0 2.0 0.0]
rotate
(rotate v angle)
(rotate v angle-x angle-y angle-z)
Rotate vector. Only for Vec2
and Vec3
types.
Examples
Usage
(rotate (vec2 1 2) (m/radians 90))
;;=> [-2.0 1.0000000000000002]
(rotate (vec3 1 2 3) (m/radians 90) 0 0)
;;=> [1.0 -3.0 2.0]
round
(round vector)
Apply round to vector elements.
Examples
Usage
(round (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.0 -1.0 2.0 0.0]
safe-sqrt
(safe-sqrt vector)
Apply safe-sqrt to vector elements.
Examples
Usage
(safe-sqrt (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.7071067811865476 0.0 1.449137674618944 0.0]
sec
(sec vector)
Apply sec to vector elements.
Examples
Usage
(sec (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.139493927324549 14.136832902969918 -1.9808016559672244 1.0]
sech
(sech vector)
Apply sech to vector elements.
Examples
Usage
(sech (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.886818883970074 0.4250960349422804 0.2412945062018547 1.0]
seq->vec2
(seq->vec2 xs)
Any seq to Vec2
Examples
Usage
(seq->vec2 [11 22 33 44 55])
;;=> [11.0 22.0]
seq->vec3
(seq->vec3 xs)
Any seq to Vec3
Examples
Usage
(seq->vec3 (lazy-seq (quote (1 2))))
;;=> [1.0 2.0 0.0]
seq->vec4
(seq->vec4 xs)
Any seq to Vec4
Examples
Usage
(seq->vec4 (double-array [11 22 33 44 55]))
;;=> [11.0 22.0 33.0 44.0]
set-mag
(set-mag v len)
Set length of the vector
Examples
Usage
(set-mag (vec2 0.22 0.22) (m/sqrt 2.0))
;;=> [1.0000000000000002 1.0000000000000002]
(set-mag (vec2 1.0 1.0) 0.0)
;;=> [0.0 0.0]
sfrac
(sfrac vector)
Apply sfrac to vector elements.
Examples
Usage
(sfrac (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5 -0.5 0.10000000000000009 0.0]
sgn
(sgn vector)
Apply sgn to vector elements.
Examples
Usage
(sgn (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.0 -1.0 1.0 1.0]
sigmoid
(sigmoid vector)
Apply sigmoid to vector elements.
Examples
Usage
(sigmoid (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.6224593312018546 0.18242552380635632 0.8909031788043871 0.5]
signum
(signum vector)
Apply signum to vector elements.
Examples
Usage
(signum (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [1.0 -1.0 1.0 0.0]
sin
(sin vector)
Apply sin to vector elements.
Examples
Usage
(sin (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.47942553860420295 -0.9974949866040544 0.8632093666488738 0.0]
sinc
(sinc vector)
Apply sinc to vector elements.
Examples
Usage
(sinc (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.6366197723675814 -0.2122065907891938 0.04683960205159357 1.0]
sinh
(sinh vector)
Apply sinh to vector elements.
Examples
Usage
(sinh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5210953054937474 -2.1292794550948178 4.021856742157334 0.0]
sq
(sq vector)
Apply sq to vector elements.
Examples
Usage
(sq (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.25 2.25 4.41 0.0]
sqrt
(sqrt vector)
Apply sqrt to vector elements.
Examples
Usage
(sqrt (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.7071067811865476 ##NaN 1.449137674618944 0.0]
sub
(sub v)
(sub v1 v2)
Subtraction of two vectors.
Examples
Usage
(sub (vec2 1 2) (vec2 -1 -2))
;;=> [2.0 4.0]
tan
(tan vector)
Apply tan to vector elements.
Examples
Usage
(tan (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.5463024898437905 -14.101419947171719 -1.7098465429045075 0.0]
tanh
(tanh vector)
Apply tanh to vector elements.
Examples
Usage
(tanh (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.46211715726000974 -0.9051482536448664 0.9704519366134539 0.0]
to-polar
(to-polar v)
To polar coordinates (2d, 3d only), first element is length, the rest angle.
Examples
Usage
(to-polar (vec2 1.0 1.0))
;;=> [1.4142135623730951 0.7853981633974483]
(to-polar (vec3 1.0 0.0 1.0))
;;=> [1.4142135623730951 0.7853981633974483 0.0]
transform
(transform v o vx vy)
(transform v o vx vy vz)
Transform vector; map point to coordinate system defined by origin, vx and vy (as bases), Only for Vec2
and Vec3
types.
Examples
Usage
(transform (vec2 1 1) (vec2 -1 -1) (vec2 1.0 0.0) (vec2 0.0 1.0))
;;=> [0.0 0.0]
(transform (vec3 1 1 1)
(vec3 -1 -1 0)
(vec3 1.0 0.0 1.0)
(vec3 0.0 1.0 0.0)
(vec3 0.0 1.0 1.0))
;;=> [0.0 1.0 2.0]
trunc
(trunc vector)
Apply trunc to vector elements.
Examples
Usage
(trunc (fastmath.vector/vec4 0.5 -1.5 2.1 0.0))
;;=> [0.0 -1.0 2.0 0.0]
vec->Vec
(vec->Vec v)
Convert to Clojure primitive vector Vec
.
Examples
Check types
(type (vec->Vec [1 2 3]))
;;=> class clojure.core.Vec
(type (vec->Vec (vec2 1 2)))
;;=> class clojure.core.Vec
(type (vec->Vec (vec3 1 2 3)))
;;=> class clojure.core.Vec
(type (vec->Vec (vec4 1 2 3 4)))
;;=> class clojure.core.Vec
(type (vec->Vec (array-vec 1)))
;;=> class clojure.core.Vec
vec2
(vec2 x y)
(vec2)
Make 2d vector.
Examples
Usage
(vec2 0.5 -0.5)
;;=> [0.5 -0.5]
(vec2)
;;=> [0.0 0.0]
Destructuring
(let [[x y] (vec2 4.3 2.2)] (+ x y))
;;=> 6.5
As function
[((vec2 11 22) 0) ((vec2 11 22) 1)]
;;=> [11.0 22.0]
As sequence
(map (fn* [p1__23716#] (* 2.0 p1__23716#)) (vec2 1 2))
;;=> (2.0 4.0)
(reduce clojure.core/+ (vec2 6 4))
;;=> 10.0
(cons 6.0 (vec2 3 4))
;;=> (6.0 3.0 4.0)
(first (vec2 3 4))
;;=> 3.0
(second (vec2 3 4))
;;=> 4.0
(last (vec2 3 4))
;;=> 4.0
(nth (vec2 3 4) 1)
;;=> 4.0
(filter clojure.core/neg? (vec2 -1 2))
;;=> (-1.0)
Count
(count (vec2 4 3))
;;=> 2
vec3
(vec3 x y z)
(vec3 v z)
(vec3)
Make Vec2 vector
Examples
Usage
(vec3)
;;=> [0.0 0.0 0.0]
(vec3 0.5 -0.5 1.0)
;;=> [0.5 -0.5 1.0]
(let [v (vec2 1 2)] (vec3 v -1.0))
;;=> [1.0 2.0 -1.0]
vec4
(vec4 x y z w)
(vec4 v w)
(vec4 v z w)
(vec4)
Make Vec4 vector
Examples
Usage
(vec4)
;;=> [0.0 0.0 0.0 0.0]
(vec4 0.5 -0.5 1.0 -1.0)
;;=> [0.5 -0.5 1.0 -1.0]
(let [v (vec2 1 2)] (vec4 v -1.0 0.1))
;;=> [1.0 2.0 -1.0 0.1]
(let [v (vec3 0 1 2)] (vec4 v 0.1))
;;=> [0.0 1.0 2.0 0.1]
zero-count
(zero-count v)
Count zeros in vector
Examples
Usage
(zero-count [1 2 3 -1 0 2 0 0])
;;=> 3