Add perp and angle-between words for vectors. Fix bug in cross product and add unit tests.
parent
86b7ba95a8
commit
7548e57b5b
|
@ -99,9 +99,10 @@ USING: math.matrices math.vectors tools.test math ;
|
||||||
m.
|
m.
|
||||||
] unit-test
|
] 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
|
[ { 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 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
|
[ { 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 ;
|
: mnorm ( m -- n ) dup mmax abs m/n ;
|
||||||
|
|
||||||
: cross ( vec1 vec2 -- vec3 )
|
: cross ( vec1 vec2 -- vec3 )
|
||||||
[ [ { 1 2 1 } vshuffle ] [ { 2 0 0 } vshuffle ] bi* v* ]
|
[ [ { 1 2 0 } vshuffle ] [ { 2 0 1 } vshuffle ] bi* v* ]
|
||||||
[ [ { 2 0 0 } vshuffle ] [ { 1 2 1 } vshuffle ] bi* v* ] 2bi v- ; inline
|
[ [ { 2 0 1 } vshuffle ] [ { 1 2 0 } vshuffle ] bi* v* ] 2bi v- ; inline
|
||||||
|
|
||||||
: proj ( v u -- w )
|
: proj ( v u -- w )
|
||||||
[ [ v. ] [ norm-sq ] bi / ] keep n*v ;
|
[ [ 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 )
|
: (gram-schmidt) ( v seq -- newseq )
|
||||||
[ dupd proj v- ] each ;
|
[ dupd proj v- ] each ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue