我正在使用react-native-sensors磁力计开发指南针应用程序。我得到了正确的值,并且指南针工作正常,主要问题是指南针的快速更新,方向变化过于频繁,变化幅度为+ -5度。
我想做一个光滑的方向指南针。

_angle = (magnetometer) => {
    if (magnetometer) {
      let { x, y, z } = magnetometer

      if (Math.atan2(y, x) >= 0) {
        angle = Math.atan2(y, x) * (180 / Math.PI)
      } else {
        angle = (Math.atan2(y, x) + 2 * Math.PI) * (180 / Math.PI)
      }
    }

    return Math.round(angle)
  }


//Inside ComponentDidMount
magnetometer.subscribe(({ x, y, z, timestamp }) =>
      this.setState({ sensorValue: this._angle({ x, y, z }) })

最佳答案

我会提出两件事。

不要用磁力计的每个输出来更新状态。而是对数据进行某种过滤。
一个简单的例子就是减少采样。假设磁力计为您提供了1000个样本/秒(我组成了数据)。每秒对视图进行1000次更新是太多了,而不是创建200个样本的缓冲区并在每次充满时设置200个样本的平均值的状态。在这种情况下,您每秒只有5次更新,大大减少了震动感。在此处使用不同的值进行一些实验,直到找到所需的输出。如果您想要更平滑的东西,重叠的缓冲区也可以工作:200个样本缓冲区,但是不必每次都将缓冲区重置为满,只需删除第一个缓冲区100。因此,样本数量减少了1/10,但是每个输出都是100个新样本与100个已经影响输出的样本之间的平均值。

第二件事是不要将罗盘针直接设置在磁力计值的位置,否则,看起来像是针在跳动(零平滑)。创建过渡动画以在更改位置时产生平滑的运动。

通过这两件事,它应该可以正常工作。
我希望这个信息对您有用,祝您指南针好运!

关于android - 使用响应式(Reactive) native 的磁力计进行平滑的方向罗盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57308560/

10-09 02:51