]> gitweb.factorcode.org Git - factor.git/blob - basis/math/vectors/vectors.factor
colors.constants: defines a COLOR: word which looks up colors in X11 rgb.txt
[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 : vgreatest ( array -- vmax ) { -1.0/0.0 -1.0/0.0 } [ vmax ] reduce ; 
23 : vleast    ( array -- vmax ) {  1.0/0.0  1.0/0.0 } [ vmin ] reduce ; 
24
25 : v. ( u v -- x ) [ * ] [ + ] 2map-reduce ;
26 : norm-sq ( v -- x ) [ absq ] [ + ] map-reduce ;
27 : norm ( v -- x ) norm-sq sqrt ;
28 : normalize ( u -- v ) dup norm v/n ;
29
30 : distance ( u v -- x ) [ - absq ] [ + ] 2map-reduce sqrt ;
31
32 : set-axis ( u v axis -- w )
33     [ [ zero? 2over ? ] dip swap nth ] map-index 2nip ;
34
35 HINTS: vneg { array } ;
36 HINTS: norm-sq { array } ;
37 HINTS: norm { array } ;
38 HINTS: normalize { array } ;
39 HINTS: distance { array array } ;
40
41 HINTS: n*v { object array } ;
42 HINTS: v*n { array object } ;
43 HINTS: n/v { array } ;
44 HINTS: v/n { array object } ;
45
46 HINTS: v+ { array array } ;
47 HINTS: v- { array array } ;
48 HINTS: v* { array array } ;
49 HINTS: v/ { array array } ;
50 HINTS: vmax { array array } ;
51 HINTS: vmin { array array } ;
52 HINTS: v. { array array } ;