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 ;

Annotation: ...

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 ;

! test...
( 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 } }

Annotation: 3D rotations

Author: evgeny
Mode: factor
Date: Wed, 21 Jul 2010 13:28:32
Plain Text |
: rotf1 ( p -- p ) [ [ x>> ] [ z>> neg ] [ y>> ] tri ] posn boa

Annotation: 3D rotations

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 ) 

Annotation: 3D rotations

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

Summary:
Author:
Mode:
Body: