15

While trying to answer another SO question, the issue of how to calculate Euler angles for dimensions > 3 came up. The RSpincalc package has a straightforward DCM2EA function for converting a 3d rotation matrix to Euler or Tait-Bryan angles, but this only handles the specific case of 3 dimensions. The wikipedia page on Euler angles briefly discusses the issue of extending Euler angles to higher dimensions and cites an Italian paper which apparently generalises the method to greater numbers of dimensions. Unfortunately, neither my Italian nor my maths are quite up to taking that paper and creating a usable R function.

My current method, used in this answer is a little cumbersome, to say the least. I use the Ryacas package to create a symbolic matrix which is the composite of a series of rotations for an arbitrary number of dimensions. This can then be solved iteratively against a known rotation matrix to find the angles required. It works, but it gets increasingly slow once the number of dimensions is 5 or more.

Is there a better way to achieve this objective, either through implementation of the method in the Italian paper or something else?

Community
  • 1
  • 1
Nick Kennedy
  • 12,062
  • 2
  • 26
  • 49

1 Answers1

2

There is an interesting paper here from 1972 that addresses the issue of computing N-dimensional Euler angles given an N-dimensional orthogonal matrix (which I assume is what you have). I skimmed the paper and it gives formulas for what you seem to need:

  1. The transformation matrix given the N-dimensional Euler angles
  2. The N-dimensional Euler angles given the transformation matrix
  3. Alternative parameterizations since the equations given in the paper address one particular parameterization, which is common to Euler representations.

I did not try to re-derive and validate their equations but they give explicit formulas so you could implement them for low-dimensions for which you already have answers and see if they agree.

dpmcmlxxvi
  • 1,212
  • 1
  • 9
  • 12
  • I won't be able to verify this in the next 7 hours but it's the closest to an answer there's been so I've awarded the bounty. – Nick Kennedy Jul 31 '15 at 23:09