Paste: 3D rotations
Author: | wagstaff |
Mode: | factor |
Date: | Mon, 19 Jul 2010 21:23:04 |
Plain Text |
USING: math accessors kernel ;
IN: bedlam
TUPLE: posn
{ x integer }
{ y integer }
{ z integer } ;
: getXYZ ( posn -- x y z posn ) [ [ z>> ] [ y>> ] [ x>> ] tri ] keep ;
: rotF1 ( posn -- posn ) getXYZ swap >>x swap >>z swap neg >>y ;
: rotF2 ( posn -- posn ) getXYZ swap >>z swap >>y swap neg >>x ;
: rotF3 ( posn -- posn ) getXYZ swap >>y swap neg >>x swap >>z ;
: rotD1 ( posn -- posn ) getXYZ swap >>y swap >>z swap >>x ;
: rotD2 ( posn -- posn ) getXYZ swap neg >>y swap >>z swap neg >>x ;
: rotD3 ( posn -- posn ) getXYZ swap >>y swap neg >>z swap neg >>x ;
: rotD4 ( posn -- posn ) getXYZ swap neg >>y swap neg >>z swap >>x ;
: rotL1 ( posn -- posn ) getXYZ swap neg >>y swap neg >>x swap neg >>z ;
: rotL2 ( posn -- posn ) getXYZ swap neg >>z swap neg >>y swap neg >>x ;
: rotL3 ( posn -- posn ) getXYZ swap neg >>x swap neg >>z swap neg >>y ;
: rotL4 ( posn -- posn ) getXYZ swap neg >>x swap >>z swap >>y ;
Author: | dmsh |
Mode: | factor |
Date: | Mon, 19 Jul 2010 22:44:35 |
Plain Text |
TUPLE: posn x y z ;
: getXYZ ( posn -- x y z ) [ x>> ] [ y>> ] [ z>> ] tri ;
: <posn> ( x y z -- posn ) posn boa ;
: rearrange ( posn quot -- posn' ) [ getXYZ ] dip call <posn> ; inline
: f1 ( x y z -- x' y' z' ) neg swap ;
:: d1 ( x y z -- z x y ) z x y ;
: rotf1 ( p -- p ) [ f1 ] rearrange ;
: rotd1 ( p -- p ) [ d1 ] rearrange ;
( scratchpad ) 1 2 3 <posn> rotf1 .
T{ posn { x 1 } { y -3 } { z 2 } }
( scratchpad ) 1 2 3 <posn> rotd1 .
T{ posn { x 3 } { y 1 } { z 2 } }
Author: | evgeny |
Mode: | factor |
Date: | Wed, 21 Jul 2010 13:28:32 |
Plain Text |
: rotf1 ( p -- p ) [ [ x>> ] [ z>> neg ] [ y>> ] tri ] posn boa
Author: | evgeny |
Mode: | factor |
Date: | Wed, 21 Jul 2010 17:15:18 |
Plain Text |
TUPLE: posn
{ x integer }
{ y integer }
{ z integer } ;
: rotf1 ( posn -- posn ) [ x>> ] [ z>> neg ] [ y>> ] tri posn boa ;
!test
( scratchpad ) 1 2 3 posn boa
--- Data stack:
T{ posn f 1 2 3 }
( scratchpad ) rotf1
--- Data stack:
T{ posn f 1 -3 2 }
( scratchpad )
Author: | evgeny |
Mode: | factor |
Date: | Wed, 21 Jul 2010 18:05:52 |
Plain Text |
TUPLE: posn
{ x integer }
{ y integer }
{ z integer } ;
: w ( x p q r -- posn )
tri posn boa ; inline
: rotf1 ( posn -- posn ) [ x>> ] [ z>> neg ] [ y>> ] w ;
: rotf2 ( posn -- posn ) [ z>> neg ] [ y>> ] [ x>> ] w ;
New Annotation