滑动因子的数学调整

时间:2015-10-22 20:22:36

标签: objective-c math

我无法弄清楚这一点。所以我正在刷一张卡片(火种风格),我正在从0.0到1.0捕获swipePercent ......我希望下一张卡片上的动画发生在0.2到0.4之间。

所以我需要一个变量swipePercentAdjusted,在swipePercent = 0.2时从0.0开始,然后在swipePercent = 0.4时加速到1.0。

我无法弄清楚这一点。

2 个答案:

答案 0 :(得分:0)

这样的事情:

if (swipePercent >= 0.2 && swipePercent <= 0.4) {
    CGFloat swipePercentAdjusted = (swipePercent - 0.2) / 0.2;
}

示例:

swipePercent是0.2收益率0.0
swipePercent是0.3收益率0.5
swipePercent是0.4收益率1.0

答案 1 :(得分:0)

最残酷的解决方案是将间隔重新设置为0.2 - 0.4到0.0 - 1.0。 (这与rmaddys解决方案类似)。

if(swipePercent<0.2)
  return 0.0;
if(swipePercent>0.4)
  return 1.0;
return (swipePercent-0.2)/(0.4-0.2)

可以在一个简单的函数中实现

double remapLinear(double low, double high, double value) {
  if(swipePercent<low)
    return 0.0;
  if(swipePercent>high)
    return 1.0;
  return (swipePercent-low)/(high-low)
}

然而,有时这太突然了。在这种情况下,您可以使用基于余弦的转换

double remapSmooth(double low, double high, double value) {
  if(swipePercent<low)
    return 0.0;
  if(swipePercent>high)
    return 1.0;
  double z = (swipePercent-low)/(high-low);
  return 0.5-0.5*cos(z*PI);
}