transformDeltaViaPositions method Null safety
Transforms untransformedDelta into the coordinate system described by
transform.
It uses the provided untransformedEndPosition and
transformedEndPosition of the provided delta to increase accuracy.
If transform is null, untransformedDelta is returned.
Implementation
static Offset transformDeltaViaPositions({
required Offset untransformedEndPosition,
Offset? transformedEndPosition,
required Offset untransformedDelta,
required Matrix4? transform,
}) {
if (transform == null) {
return untransformedDelta;
}
// We could transform the delta directly with the transformation matrix.
// While that is mathematically equivalent, in practice we are seeing a
// greater precision error with that approach. Instead, we are transforming
// start and end point of the delta separately and calculate the delta in
// the new space for greater accuracy.
transformedEndPosition ??= transformPosition(transform, untransformedEndPosition);
final Offset transformedStartPosition = transformPosition(transform, untransformedEndPosition - untransformedDelta);
return transformedEndPosition - transformedStartPosition;
}