Files
Buddho-Engine/src/cljs/sekai/math/vectors.cljs
2024-04-19 14:50:26 +02:00

34 lines
1.0 KiB
Clojure

(ns sekai.math.vectors)
(defn vecn->m "Convert a vector to an m-element vector." [m v]
(vec (take m (into v (repeat (- m (count v)) 0)))))
(defn components [vecs]
(vec (map (fn [idx] (map #(nth % idx) vecs))
(range (count (first vecs))))))
(defn comp-reduce [op vecs]
(vec (map #(reduce op %) (components vecs))))
(defn manip-scalar
"Manipulate Vectors by Scalar and Operation."
[op s vecs]
(map #(op % (repeat (count %) s)) vecs))
(defn dist "Distance between two Vectors."
[v1 v2]
(reduce + (map #(abs (- %1 %2)) v1 v2)))
(defn add "Add Vectors." [& vecs] (comp-reduce + vecs))
(defn sub "Subtract Vectors." [& vecs] (comp-reduce - vecs))
(defn mult "Multiply Vectors." [& vecs] (comp-reduce * vecs))
(defn div "Divide Vectors." [& vecs] (comp-reduce / vecs))
(defn mult-s "Multiply Vectors by Scalar"
[s & vecs] (manip-scalar mult s vecs))
(defn div-s "Divide Vectors by Scalar"
[s & vecs] (manip-scalar div s vecs))
(defn dot "Dot Product" [& vecs] (reduce + (apply mult vecs)))