]> gitweb.factorcode.org Git - factor.git/blob - basis/math/vectors/vectors.factor
5316720b2f9010f6ad9968252f55a89cec0d188a
[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+   ( u v -- w ) [ + ] 2map ;
15 : v-   ( u v -- w ) [ - ] 2map ;
16 : [v-] ( u v -- w ) [ [-] ] 2map ;
17 : v*   ( u v -- w ) [ * ] 2map ;
18 : v/   ( u v -- w ) [ / ] 2map ;
19 : vmax ( u v -- w ) [ max ] 2map ;
20 : vmin ( u v -- w ) [ min ] 2map ;
21
22 : v. ( u v -- x ) [ * ] [ + ] 2map-reduce ;
23 : norm-sq ( v -- x ) [ absq ] [ + ] map-reduce ;
24 : norm ( v -- x ) norm-sq sqrt ;
25 : normalize ( u -- v ) dup norm v/n ;
26
27 : set-axis ( u v axis -- w )
28     [ >r zero? 2over ? r> swap nth ] map-index 2nip ;
29
30 HINTS: vneg { array } ;
31 HINTS: norm-sq { array } ;
32 HINTS: norm { array } ;
33 HINTS: normalize { array } ;
34
35 HINTS: n*v { object array } ;
36 HINTS: v*n { array object } ;
37 HINTS: n/v { array } ;
38 HINTS: v/n { array object } ;
39
40 HINTS: v+ { array array } ;
41 HINTS: v- { array array } ;
42 HINTS: v* { array array } ;
43 HINTS: v/ { array array } ;
44 HINTS: vmax { array array } ;
45 HINTS: vmin { array array } ;
46 HINTS: v. { array array } ;