Bearing in mind that I have no idea what I’m doing, and just looked up some
various definitions of “Euler angles” and rotating them, here’s what I came up
with:
load’trig'
PROJ =: 2 3 0 , 4 2 0 ,: 0 0 1
rotate =: [: +/ .*/ 0 1 0 eul2rot"0 +&0 0 0
eul2rot =: rotM proj { f
rotM =: (2 # [) |. ]
f =: 0:, 1:, cos, sin, -@sin
Now, in retrospect, after having written it, so that I had enough understanding
to come back and read yours, I realize it substantially recapitulates your
approach. I think the only difference I see is using PROJ { f as opposed to
your elcric .
There are also other ways to define f which one may find more or less pretty or
more or less clear. But the definitions of PROJ and f must be kept in sync.
One may also consider doing something like ( PROJ { 0:`1:`cos`sin`(-@sin) ) `:0
but at the moment I’m not seeing a lot of advantage in that (and some
disadvantages).
That is, my approach is to spell out, explicitly, which function I want at each
index. If I had some understanding of why those particular functions were
applied at those particular indices, I might be able to offer a more general
solution (based on calculating the LHA to o., for example), but I don’t, so I
can’t.
Let me know if this helps at all.
-Dan
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm