obtainTouchDistance function

double obtainTouchDistance(
  1. double currentPixelOffset,
  2. double range
)

对应 Kotlin SpringMath.obtainTouchDistance,把阻尼位移还原为触摸位移。

还原公式为 range - range^(2/3) * (range - 3*offset)^(1/3)

Implementation

double obtainTouchDistance(double currentPixelOffset, double range) {
  var absoluteOffset = currentPixelOffset.abs();
  final maximumOffset = obtainDampingDistance(1, range).abs();
  if (absoluteOffset <= 0) return 0;
  if (absoluteOffset >= maximumOffset) absoluteOffset = maximumOffset;

  final base = range - 3 * absoluteOffset;
  final signedCubeRoot = base.sign * math.pow(base.abs(), 1 / 3);
  final part2 = math.pow(range, 2 / 3) * signedCubeRoot;
  return range - part2;
}