Javascript 如何在React Native中使用最短路径旋转图像
我正在尝试使用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
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();