Skip to content

Instantly share code, notes, and snippets.

@ddmills
Last active September 29, 2016 16:46
Show Gist options
  • Save ddmills/a67254b8bffa94bbc852 to your computer and use it in GitHub Desktop.
Save ddmills/a67254b8bffa94bbc852 to your computer and use it in GitHub Desktop.
lerp
const lerp = (f0, f1, t) => (1 - t) * f0 + t * f1;
const lerp2 = (v1, v2, t) => {
return {
x: lerp(v1.x, v2.x, t),
y: lerp(v2.y, v2.x, t)
};
};
@selfsame
Copy link

(defn v2get [idx o nf]
  (cond (number? o) o
        (instance? js/Array o) (or (aget o idx) nf)
        (vector? o) (get o idx nf)
        (instance? js/Object o) (or (aget o ({0 "x" 1 "y"} idx)) nf)
        :else nf))

(defn- operate [op a b]
  #js [(op (v2get 0 a 0) (v2get 0 b 0))
       (op (v2get 1 a 1) (v2get 1 b 1))])

(defn- reduce-operate [op col]
  (cond (number? (first col))  (reduce #(operate op %1 %2) col)
        (instance? js/Array (first col)) (to-array (reduce #(operate op %1 %2) col))
        (vector? (first col)) (vec (reduce #(operate op %1 %2) col))
        (instance? js/Object (first col))  (clj->js (zipmap ["x" "y" "z" "w"] (reduce #(operate op %1 %2) col)))))

(defn v+ [& more] (reduce-operate + more))
(defn v- [& more] (reduce-operate - more))
(defn v* [& more] (reduce-operate * more))
(defn vdiv [& more] (reduce-operate / more))
(defn -v [op & more] (reduce-operate op more))


(def cap (fn [n lb ub] (min (max lb n) ub)))

(defn lerp [v1 v2 r]  
   (v+ v1 (v* (v- v2 v1) r)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment