Matrix Android:将设备旋转映射到3d场景对象旋转

Matrix Android:将设备旋转映射到3d场景对象旋转,matrix,vector,rotation,android-sensors,quaternions,Matrix,Vector,Rotation,Android Sensors,Quaternions,我的目标是使用智能手机在3d场景中旋转对象。基本上,我想将手机的旋转映射到3d对象的旋转。3d软件允许使用旋转功能旋转对象,该功能以轴和角度(旋转向量)为参数。另一种选择是使用旋转矩阵 我尝试使用android旋转向量传感器来获得一个四元数,并从中分离出θ(旋转角度)、x、y和z(旋转轴的坐标)。它可以工作,但问题是,该传感器给出的四元数对应于从当前手机位置到参考位置的旋转(基于磁北)。我需要的是得到四元数,它可以从t0的位置到t1的位置。我得到的是如何从t0的位置到参考,从t1的位置到参考 那

我的目标是使用智能手机在3d场景中旋转对象。基本上,我想将手机的旋转映射到3d对象的旋转。3d软件允许使用旋转功能旋转对象,该功能以轴和角度(旋转向量)为参数。另一种选择是使用旋转矩阵

我尝试使用android旋转向量传感器来获得一个四元数,并从中分离出θ(旋转角度)、x、y和z(旋转轴的坐标)。它可以工作,但问题是,该传感器给出的四元数对应于从当前手机位置到参考位置的旋转(基于磁北)。我需要的是得到四元数,它可以从t0的位置到t1的位置。我得到的是如何从t0的位置到参考,从t1的位置到参考

那么,是否可以使用参考来计算从位置1到位置2的四元数?也许我的策略不好,所以请毫不犹豫地提出“正确的方法”。 提前谢谢

编辑

大家好,我试着用两个连续的四元数。我们把它们称为q1和q2。在t=1时,我处于位置1,q1表示旋转至地球参考。在t=2时,我处于位置2,q2表示旋转到相同的地球参考。我计算了-q2*q1的组合。它可以工作,但问题是旋转被映射到设备坐标系。我需要的是映射到真实世界的坐标系。有人知道怎么做吗?谢谢

编辑

我想我可以说出我需要什么:如何在现实世界中以单位四元数的形式获得android设备的旋转?因此,我的实现将在这方面发挥作用。提前谢谢各位

编辑

好吧,我算是解决了。我使用了从getRotationMatrix()获得的旋转矩阵R,并将我的四元数与反转的R矩阵相乘。结果就是我想要的,当我在空间中旋转设备时,软件中的3d对象精确模拟旋转。不过还有一个问题,这只在我用我的设备面对一个特定方向时起作用,我想它是参考方向(x向东,y向磁北,z向上)。我目前正在尝试解决这个问题。如果有人能告诉我他是受欢迎的

编辑

嘿,我又回到了世界!(空虚荒凉寂寞的世界…)我想我明白了。我想使用一个初始四元数值,我们称之为朝向手机Qi初始位置的旋转。一旦得到它,我将其与当前四元数值合并,并从中得到旋转矩阵,以映射到真实世界的初始位置(而不是北)

我唯一的问题是,我不知道如何将第一个值作为常数,我尝试了:

@Override
public void onSensorChanged(SensorEvent event) {
    if (this.initialQ==null) {
        this.initialQ=event.values; 
        this.conjInitQ=conjugate(this.initialQ);
    }
  Log.v(TAG,String.valueOf(initialQ[0])+String.valueOf(initialQ[1])+String.valueOf(initialQ[2])+String.valueOf(initialQ[3])); 
然而,日志打印的值不断变化,有人能向我解释为什么吗?提前谢谢