Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 仅从校准/参考矩阵构建优化矩阵?可能/可解决?_Math_3d_Matrix_Geometry_Rotation - Fatal编程技术网

Math 仅从校准/参考矩阵构建优化矩阵?可能/可解决?

Math 仅从校准/参考矩阵构建优化矩阵?可能/可解决?,math,3d,matrix,geometry,rotation,Math,3d,Matrix,Geometry,Rotation,想象一下,iPhone的重力/旋转传感器为设备的每个姿态提供重力矢量(Vg)和当前3x3旋转矩阵(M0)。例如: Vg * M0 = Vz Vz * Mt = Vg where: Vg - current gravity vector M0 - current rotation matrix Mt - inverse (or actually transpose) matrix of M0 Vz - negative Z-axis vector = { 0, 0, -1 }

想象一下,iPhone的重力/旋转传感器为设备的每个姿态提供重力矢量(Vg)和当前3x3旋转矩阵(M0)。例如:

Vg * M0 = Vz
Vz * Mt = Vg

where:
  Vg - current gravity vector
  M0 - current rotation matrix
  Mt - inverse (or actually transpose) matrix of M0
  Vz - negative Z-axis vector = { 0, 0, -1 }
需要有一个选项来通过所有轴校准加速度计和陀螺仪,这意味着我们希望在某个时刻存储参考重力矢量(Vc)的参考矩阵(C0)。因此:

Vc * C0 = Vz
Vz * Ct = Vc

where:
  Vc - reference gravity vector
  C0 - reference rotation matrix
  Ct - inverse (or actually transpose) matrix of C0
  Vz - negative Z-axis vector = { 0, 0, -1 }
现在,如果我们将参考矩阵用作零参考矩阵,那么可以使用复合旋转矩阵(X0)计算标定重力(Vx)或相对于参考矩阵(Vc)的重力。因此:

上面的一切都很完美

但有一个问题——通过使用上述所有公式获得标定重力,我们必须首先使用当前旋转矩阵计算下一个设备姿态或旋转的复合矩阵——这是一种昂贵的操作

目的是计算一种通用重新校准矩阵(R0),该矩阵可用于直接从当前重力(Vg)计算校准重力(Vx),只需一次乘法,且不依赖于当前旋转矩阵(M0),因为该当前矩阵已包含在当前重力(Vg)中,例如:

Vg * R0 = Vx
Vx * Rt = Vg
仅将参考矩阵(C0)应用于重力矢量(Vg)不起作用,因此:

Vg * C0 != Vx
Vx * Ct != Vg
发生这种情况是因为Vg=Vz*Mt转换为Vg=Vz*Ct*Xt,因此将其与C0相乘不会得到Xt,结果向量将完全是奇数


解决方案可行吗?

到目前为止,我看到的是唯一优化的解决方案,因为似乎不可能计算所需的R0矩阵

优化的解决方案是将以下公式分成两部分:

Vx = Vz * Xt --> Vx = Vz * C0 * Ct * Xt --> Vx = Vz * C0 * Mt
步骤1:在获取或设置参考时,将负Z轴矢量(Vz)与校准参考矩阵(C0)预乘:

Vp = Vz * C0
步骤2:在每个帧(方向改变时)使用向量与转置矩阵的优化乘法(当矩阵未真正转置时):

虽然这不是我真正想要的-它工作-没有必要为每一帧计算合成矩阵,实际的运算量与通过矩阵乘法计算单个向量的运算量完全相同


如果有人找到更好/更好的解决方案-欢迎:-)

请您解释一下这些计算结果的最终目标是什么?您想计算设备的方向吗?您希望通过应用程序实现什么?@Ali最终目标是在保存参考方向时预计算该矩阵R0(由C0矩阵提供)为了快速计算标定的重力Vx=Vg*R0,自采用基准时起,矩阵R0保持不变,因此通过矩阵乘法只生成一个矢量。使用上述方法,可以在每帧每秒60次的情况下计算校准重力,即Vx=Vz*(C0*转置(M0)),这在计算上要昂贵得多。我正在寻找一种优化的方法。是的,我得到了那个部分。最后,你想用这些矩阵和向量来做点什么。我想知道你对这些矩阵和向量的最终目标是什么。您是否正在尝试跟踪设备移动时的方向?
Vp = Vz * C0
Vx = optimized_vector_by_transpose_of_matrix_mutiplication( Vp, M0 )