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
7 : vneg ( u -- v ) [ neg ] map ;
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 ;
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 ;
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 ;
27 : vfloor ( v -- _v_ ) [ floor ] map ;
28 : vceiling ( v -- ^v^ ) [ ceiling ] map ;
29 : vtruncate ( v -- -v- ) [ truncate ] map ;
31 : vsupremum ( seq -- vmax ) [ ] [ vmax ] map-reduce ;
32 : vinfimum ( seq -- vmin ) [ ] [ vmin ] map-reduce ;
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 ;
39 : distance ( u v -- x ) [ - absq ] [ + ] 2map-reduce sqrt ;
41 : set-axis ( u v axis -- w )
42 [ [ zero? 2over ? ] dip swap nth ] map-index 2nip ;
44 : 2tetra@ ( p q r s t u v w quot -- )
45 dup [ [ 2bi@ ] curry 4dip ] dip 2bi@ ; inline
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* ;
51 : bilerp ( aa ba ab bb {t,u} -- a_tu )
52 [ first lerp ] [ second lerp ] bi-curry
53 [ 2bi@ ] [ call ] bi* ;
55 : vlerp ( a b t -- a_t )
58 : vnlerp ( a b t -- a_t )
61 HINTS: vneg { array } ;
62 HINTS: norm-sq { array } ;
63 HINTS: norm { array } ;
64 HINTS: normalize { array } ;
65 HINTS: distance { array array } ;
67 HINTS: n*v { object array } ;
68 HINTS: v*n { array object } ;
69 HINTS: n/v { array } ;
70 HINTS: v/n { array object } ;
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 } ;
80 HINTS: vlerp { array array array } ;
81 HINTS: vnlerp { array array object } ;
83 HINTS: bilerp { object object object object array } ;
84 HINTS: trilerp { object object object object object object object object array } ;