提问者:小点点

Kinect SDK-转换角度的旋转度


我创建了三个滑块,分别代表x轴、y轴和z轴。我将它们的最小/最大值设置为与骨骼的自然运动相关的值(例如,在Yaxis上,肩膀的运动不超过大约40度)。如果我们以肩(右)关节为例,我希望能够在每个轴上应用旋转,这样我就可以改变骨骼在三维空间中的位置。我相信与这种动作相关的术语是正向运动学。

我的问题是:

a)Kinect SDK为关节提供了一个绝对和层次化的矩阵。我应该查看哪一个来操作?

b)四元数给了你什么,而矩阵没有?

c)如何获取4x4矩阵信息并找到x轴、y轴和z轴的角度(以度或弧度为单位)?

d)我已经看到了如何通过使用如下计算将3x3矩阵相乘来转换它们:

    Matrix3X3 matrixx = new Matrix3X3();
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            matrixx.elements[(i * 3) + j] = ((R2.elements[i * 3] * R1.elements[j]) + (R2.elements[(i * 3) + 1] * R1.elements[3 + j])) + (R2.elements[(i * 3) + 2] * R1.elements[6 + j]);
        }
    }
    return matrixx;

更具体地说,我是否可以在每个轴上转换4x4矩阵,以便每个轴都有一个滑块?那么如何应用10度的x轴旋转呢?我见过3x3矩阵的旋转如下所示:

    public static Matrix3D NewRotateAroundX(double radians)
    {
        var matrix = new Matrix3D();
        matrix._matrix[1, 1] = Math.Cos(radians);
        matrix._matrix[1, 2] = Math.Sin(radians);
        matrix._matrix[2, 1] = -(Math.Sin(radians));
        matrix._matrix[2, 2] = Math.Cos(radians);
        return matrix;
    }
    public static Matrix3D NewRotateAroundY(double radians)
    {
        var matrix = new Matrix3D();
        matrix._matrix[0, 0] = Math.Cos(radians);
        matrix._matrix[0, 2] = -(Math.Sin(radians));
        matrix._matrix[2, 0] = Math.Sin(radians);
        matrix._matrix[2, 2] = Math.Cos(radians);
        return matrix;
    }
    public static Matrix3D NewRotateAroundZ(double radians)
    {
        var matrix = new Matrix3D();
        matrix._matrix[0, 0] = Math.Cos(radians);
        matrix._matrix[0, 1] = Math.Sin(radians);
        matrix._matrix[1, 0] = -(Math.Sin(radians));
        matrix._matrix[1, 1] = Math.Cos(radians);
        return matrix;
    }

提前感谢帮助!


共1个答案

匿名用户