Преобразование эйлера в матрицу и матрицы в эйлер

Я пытаюсь преобразовать трехмерное вращение, описанное в терминах углов Эйлера, в матрицу, а затем обратно, используя .NET / C #. Мои соглашения:

левосторонняя система (x вправо, y вверх, z вперед)порядок вращения: вокруг y, шаг вокруг x, крен вокруг zПовороты положительны с использованием правила левой руки (большой палец указывает на + бесконечность)

Мое испытание:

Эйлер в матрицу (Я'мы убрали часть перевода x, y, z для упрощения)

Matrix3D matrix = new Matrix3D() {
    M11 =   cosH * cosB - sinH * sinP * sinB,
    M12 = - sinB * cosP,
    M13 =   sinH * cosB + cosH * sinP * sinB,
    M21 =   cosH * sinB + sinH * sinP * cosB,
    M22 =   cosB * cosP,
    M23 =   sinB * sinH - cosH * sinP * cosB,
    M31 = - sinH * cosP,
    M32 = - sinP,
    M33 =   cosH * cosP,
};

Матрица Эйлера

const double RD_TO_DEG = 180 / Math.PI;            
double h, p, b; // angles in degrees

// extract pitch
double sinP = -matrix.M23;            
if (sinP >= 1) {
    p = 90; }       // pole
else if (sinP 

Ответы на вопрос(3)

Ваш ответ на вопрос