invert method
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);
}