Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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
Javascript 如何在React Native中使用最短路径旋转图像_Javascript_React Native_Math_Rotation - Fatal编程技术网

Javascript 如何在React Native中使用最短路径旋转图像

Javascript 如何在React Native中使用最短路径旋转图像,javascript,react-native,math,rotation,Javascript,React Native,Math,Rotation,我正在尝试使用React Native旋转图像。我已经按照下面的示例进行了尝试,但我更希望箭头使用较短的路径旋转到新轴承上(即在这种情况下为顺时针方向,而不是逆时针方向) 如果当前bearingAnim值为315,下一个值为45,则旋转将向后过渡,而不是从315=>45开始 如何调整代码以使用最短的旋转 const bearing = this.bearingAnim.interpolate({ inputRange: [0, 360], outputRange: ['0deg', '3

我正在尝试使用React Native旋转图像。我已经按照下面的示例进行了尝试,但我更希望箭头使用较短的路径旋转到新轴承上(即在这种情况下为顺时针方向,而不是逆时针方向)

如果当前
bearingAnim
值为
315
,下一个值为
45
,则旋转将向后过渡,而不是从
315=>45
开始

如何调整代码以使用最短的旋转

const bearing = this.bearingAnim.interpolate({
  inputRange: [0, 360],
  outputRange: ['0deg', '360deg'],
});

return <Animated.Image style={{ transform: [{ rotate: bearing }] }} source={markerGreen} />;
const bearing=this.bearingAnim.interpolate({
输入范围:[0360],
输出范围:['0deg','360deg'],
});

返回

由于每个方向可以设置为正角度或负角度(顺时针/逆时针旋转),例如315(顺时针)为-45(逆时针),因此您可以比较当前方向和新方向(顺时针和逆时针)之间的增量绝对值并将新角度设置为增量绝对值最小的角度:

const getNewDirectionangle = (direction, newDirection) => {
          const delta = {
            clockwise: (newDirection-direction)%360,
            counterClockwise: (newDirection-direction-360)%360
          }
          return
              Math.abs(delta.clockwise) < Math.abs(delta.counterClockwise) ?
              direction + delta.clockwise :
              direction + delta.counterClockwise
          
      }

我编写了一个函数,根据旧的方向计算正确的角度

她需要有新的和旧的视角 它将返回您需要添加以达到新方向的方向 (如果箭头需要向后移动,它将返回负数并向后移动)


可以计算两个值之间的角度,然后根据该角度决定是顺时针旋转还是逆时针旋转。两个值之间的角度可以表示为abs(a-b)和360 abs(a-b),其中abs()表示绝对值函数。

function newRotate(oldV, newV) {
  const diff1 = newV - oldV;
  let myOldV = oldV;
  if (newV < oldV) newV += 360;
  else myOldV += 360;

  const diff2 = newV - myOldV;
  const shortDiff = Math.abs(diff1) < Math.abs(diff2) ? diff1 : diff2;
  return oldV + shortDiff;
}

const value =newRotate(oldValue,newValue)

 Animated.timing(routeAnimtion, {
      toValue: value,
      duration: 10,
    }).start();