summary refs log tree commit diff
path: root/lib/vec.fnl
blob: 943c7dc02b7cff57f6cf300b61b169ab5d07f177 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(fn ilerp* [a b c d x]
  (+ c (* (/ (- x a) (- b a)) (- d c))))

(fn add [a b]
  {:x (+ a.x b.x)
   :y (+ a.y b.y)})

(fn sub [a b]
  {:x (- a.x b.x)
   :y (- a.y b.y)})

(fn mul [v n]
  {:x (* v.x n)
   :y (* v.y n)})

(fn mag [v]
  (math.sqrt (+ (* v.x v.x) (* v.y v.y))))

(fn norm [v n]
  (mul v (/ (or n 1) (mag v))))

(fn wrap [a b]
  {:x (% a.x b.x)
   :y (% a.y b.y)})

(fn lerp [a b c d x]
  {:x (ilerp* a.x b.x c.x d.x x.x)
   :y (ilerp* a.y b.y c.y d.y x.y)})

(fn clone [v]
  {:x v.x :y v.y})

{: lerp : add : sub : mul : mag : wrap : norm : clone}