invert method

  1. @override
Offset invert(
  1. Offset output
)

Inverts an output to input.

Implementation

@override
Offset invert(Offset output) {
  final axisX = Vector3(1, 0, 0);
  final startMatrix = Matrix4.rotationZ(angles.first);
  final startVector = startMatrix.transformed3(axisX);
  final pointVector = Vector3(
    output.dx - center.dx,
    output.dy - center.dy,
    0,
  );
  if (vectorIsZero(pointVector)) {
    return Offset.zero;
  }

  var theta = vectorAngle(startVector, pointVector);
  if (theta.equalTo(pi * 2)) {
    theta = 0;
  }
  final length = pointVector.length;
  final rangeXSwipe = (angles.last - angles.first).abs();
  final ratioX = theta / rangeXSwipe;
  final ratioY = (length - radiuses.first) / (radiuses.last - radiuses.first);
  return transposed ? Offset(ratioY, ratioX) : Offset(ratioX, ratioY);
}