]> gitweb.factorcode.org Git - factor.git/blob - basis/math/vectors/vectors.factor
Working on webapps.mason
[factor.git] / basis / math / vectors / vectors.factor
1 ! Copyright (C) 2005, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays kernel sequences math math.functions hints
4 math.order ;
5 IN: math.vectors
6
7 : vneg ( u -- v ) [ neg ] map ;
8
9 : v+n ( u n -- v ) [ + ] curry map ;
10 : n+v ( n u -- v ) [ + ] with map ;
11 : v-n ( u n -- v ) [ - ] curry map ;
12 : n-v ( n u -- v ) [ - ] with map ;
13
14 : v*n ( u n -- v ) [ * ] curry map ;
15 : n*v ( n u -- v ) [ * ] with map ;
16 : v/n ( u n -- v ) [ / ] curry map ;
17 : n/v ( n u -- v ) [ / ] with map ;
18
19 : v+   ( u v -- w ) [ + ] 2map ;
20 : v-   ( u v -- w ) [ - ] 2map ;
21 : [v-] ( u v -- w ) [ [-] ] 2map ;
22 : v*   ( u v -- w ) [ * ] 2map ;
23 : v/   ( u v -- w ) [ / ] 2map ;
24 : vmax ( u v -- w ) [ max ] 2map ;
25 : vmin ( u v -- w ) [ min ] 2map ;
26
27 : vfloor    ( v -- _v_ ) [ floor    ] map ;
28 : vceiling  ( v -- ^v^ ) [ ceiling  ] map ;
29 : vtruncate ( v -- -v- ) [ truncate ] map ;
30
31 : vsupremum ( seq -- vmax ) [ ] [ vmax ] map-reduce ; 
32 : vinfimum ( seq -- vmin ) [ ] [ vmin ] map-reduce ; 
33
34 : v. ( u v -- x ) [ * ] [ + ] 2map-reduce ;
35 : norm-sq ( v -- x ) [ absq ] [ + ] map-reduce ;
36 : norm ( v -- x ) norm-sq sqrt ;
37 : normalize ( u -- v ) dup norm v/n ;
38
39 : distance ( u v -- x ) [ - absq ] [ + ] 2map-reduce sqrt ;
40
41 : set-axis ( u v axis -- w )
42     [ [ zero? 2over ? ] dip swap nth ] map-index 2nip ;
43
44 : 2tetra@ ( p q r s t u v w quot -- )
45     dup [ [ 2bi@ ] curry 4dip ] dip 2bi@ ; inline
46
47 : trilerp ( aaa baa aba bba aab bab abb bbb {t,u,v} -- a_tuv )
48     [ first lerp ] [ second lerp ] [ third lerp ] tri-curry
49     [ 2tetra@ ] [ 2bi@ ] [ call ] tri* ;
50
51 : bilerp ( aa ba ab bb {t,u} -- a_tu )
52     [ first lerp ] [ second lerp ] bi-curry
53     [ 2bi@ ] [ call ] bi* ;
54
55 : vlerp ( a b t -- a_t )
56     [ lerp ] 3map ;
57
58 : vnlerp ( a b t -- a_t )
59     [ lerp ] curry 2map ;
60
61 HINTS: vneg { array } ;
62 HINTS: norm-sq { array } ;
63 HINTS: norm { array } ;
64 HINTS: normalize { array } ;
65 HINTS: distance { array array } ;
66
67 HINTS: n*v { object array } ;
68 HINTS: v*n { array object } ;
69 HINTS: n/v { array } ;
70 HINTS: v/n { array object } ;
71
72 HINTS: v+ { array array } ;
73 HINTS: v- { array array } ;
74 HINTS: v* { array array } ;
75 HINTS: v/ { array array } ;
76 HINTS: vmax { array array } ;
77 HINTS: vmin { array array } ;
78 HINTS: v. { array array } ;
79
80 HINTS: vlerp { array array array } ;
81 HINTS: vnlerp { array array object } ;
82
83 HINTS: bilerp { object object object object array } ;
84 HINTS: trilerp { object object object object object object object object array } ;