]> gitweb.factorcode.org Git - factor.git/commitdiff
Add perp and angle-between words for vectors. Fix bug in cross product and add unit...
authorErik Charlebois <erikcharlebois@gmail.com>
Thu, 25 Feb 2010 16:15:53 +0000 (08:15 -0800)
committerErik Charlebois <erikcharlebois@gmail.com>
Fri, 26 Feb 2010 00:46:02 +0000 (16:46 -0800)
basis/math/matrices/matrices-tests.factor
basis/math/matrices/matrices.factor

index a22f6cc97812abe75e3f80227526f761692808c5..b8277412091d755b3e9947d6cbfd407bf677d1a2 100644 (file)
@@ -99,9 +99,10 @@ USING: math.matrices math.vectors tools.test math ;
     m.
 ] unit-test
 
-[ { 0 0 -1 } ] [ { 1 0 0 } { 0 1 0 } cross ] unit-test
+[ { 0 0 1 } ] [ { 1 0 0 } { 0 1 0 } cross ] unit-test
 [ { 1 0 0 } ] [ { 0 1 0 } { 0 0 1 } cross ] unit-test
 [ { 0 1 0 } ] [ { 0 0 1 } { 1 0 0 } cross ] unit-test
+[ { 0.0 -0.707 0.707 } ] [ { 1.0 0.0 0.0 } { 0.0 0.707 0.707 } cross ] unit-test
 
 [ { 1 0 0 } ] [ { 1 1 0 } { 1 0 0 } proj ] unit-test
 
index 2a1a217c2eabae901d63d2e0c4346752a402d56a..216d2c31bbb142bd7d104ba60abc1540d098d32d 100644 (file)
@@ -111,12 +111,18 @@ IN: math.matrices
 : mnorm ( m -- n ) dup mmax abs m/n ;
 
 : cross ( vec1 vec2 -- vec3 )
-    [ [ { 1 2 1 } vshuffle ] [ { 2 0 0 } vshuffle ] bi* v* ]
-    [ [ { 2 0 0 } vshuffle ] [ { 1 2 1 } vshuffle ] bi* v* ] 2bi v- ; inline
+    [ [ { 1 2 0 } vshuffle ] [ { 2 0 1 } vshuffle ] bi* v* ]
+    [ [ { 2 0 1 } vshuffle ] [ { 1 2 0 } vshuffle ] bi* v* ] 2bi v- ; inline
 
 : proj ( v u -- w )
     [ [ v. ] [ norm-sq ] bi / ] keep n*v ;
 
+: perp ( v u -- w )
+    dupd proj v- ;
+
+: angle-between ( v u -- a )
+    [ normalize ] bi@ v. acos ;
+
 : (gram-schmidt) ( v seq -- newseq )
     [ dupd proj v- ] each ;