Add perp and angle-between words for vectors. Fix bug in cross product and add unit tests.
parent
86b7ba95a8
commit
7548e57b5b
basis/math/matrices
|
@ -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
|
||||
|
||||
|
|
|
@ -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 ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue