我的目标是使用我的Android手机为我的头戴式显示器编写一个头部跟踪器 . 该动作转移到鼠标移动,而鼠标移动又用于PC游戏 . 我想把我的Android手机安装到头部跟踪器的后面,所以它将固定在我的脑后 . y轴朝上,当向前看时,x轴朝向右侧,这意味着当你看到我的后脑勺时,你会看到手机显示屏 .

mobile phone image

由于这种设置的机制,在y轴和重力轴之间存在一个角度,因此当直视前方时,移动电话稍微倾斜远离头部后部 . 它也围绕z轴稍微旋转,并且可以在围绕z轴移动的同时在大约5到10°的角度内旋转 .

我的手机没有陀螺仪 . 我用了

public void onSensorChanged(SensorEvent event)
{
  // alpha is calculated as t / (t + dT)
  // with t, the low-pass filter's time-constant
  // and dT, the event delivery rate

  final float alpha = 0.8;

  gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
  gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
  gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

  linear_acceleration[0] = event.values[0] - gravity[0];
  linear_acceleration[1] = event.values[1] - gravity[1];
  linear_acceleration[2] = event.values[2] - gravity[2];
}

这比仅使用加速度计的原始数据更好 . 我只使用0.8作为alpha,我是否需要根据t /(t dT)进行调整?那么如何获得t和dT呢?

使用这种设置,将头部向上和向下倾斜工作 - 在这里和那里进行一些改进 - 很好 .

但左右移动结果是一个问题 . 同时将对角线从左下方移动到右上方并进行镜像 . 或者在圈子里移动 .

来自基础数学,而不是我的错误描述,你建议使用哪些代码?