factor/extra/math/vectors/homogeneous/homogeneous.factor

38 lines
911 B
Factor
Raw Normal View History

! Copyright (C) 2009 Joe Groff.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.vectors sequences ;
IN: math.vectors.homogeneous
: (homogeneous-xyz) ( h -- xyz )
but-last ; inline
: (homogeneous-w) ( h -- w )
last ; inline
: h+ ( a b -- c )
2dup [ (homogeneous-w) ] bi@ over =
[ [ [ (homogeneous-xyz) ] bi@ v+ ] dip suffix ] [
drop
[ [ (homogeneous-xyz) ] [ (homogeneous-w) ] bi* v*n ]
[ [ (homogeneous-w) ] [ (homogeneous-xyz) ] bi* n*v v+ ]
[ [ (homogeneous-w) ] [ (homogeneous-w) ] bi* * suffix ] 2tri
] if ;
: n*h ( n h -- nh )
[ (homogeneous-xyz) n*v ] [ (homogeneous-w) suffix ] bi ;
: h*n ( h n -- nh )
swap n*h ;
: hneg ( h -- -h )
-1.0 swap n*h ;
: h- ( a b -- c )
hneg h+ ;
: v>h ( v -- h )
1.0 suffix ;
: h>v ( h -- v )
[ (homogeneous-xyz) ] [ (homogeneous-w) ] bi v/n ;