(use goo)
(dc <matrix> (<any>))
(dp matrix-rows (<matrix> => <int>))
(dp matrix-cols (<matrix> => <int>))
(dp matrix-elts (<matrix> => <col>))
(dm fab-matrix (rows|<int> cols|<int> => <matrix>)
(def matrix (new <matrix>))
(set (matrix-rows matrix) rows)
(set (matrix-cols matrix) cols)
(set (matrix-elts matrix) (vec 1 0 0 0 1 0 0 0 1))
matrix
)
(dm matrix-elt (matrix|<matrix> index|<int> => <num>)
(elt (matrix-elts matrix) index)
)
(dm matrix-rot-y (matrix|<matrix> deg|<int>)
(when (< deg 0)
(set deg (+ deg 360))
)
(def idx (div deg 90))
(def rvals (tup (tup 1 0) (tup 0 1) (tup -1 0) (tup 0 -1)))
(def my-vals (elt rvals idx))
(set (matrix-elts matrix) (vec (1st my-vals) 0 (- 0 (2nd my-vals))
0 1 0
(2nd my-vals) 0 (1st my-vals)))
)
(export
<matrix>
fab-matrix
matrix-elt
matrix-rot-y
)