transformPoint method Null safety
Applies the given matrix as a perspective transform to the given point.
This function assumes the given point has a z-coordinate of 0.0. The z-coordinate of the result is ignored.
While not common, this method may return (NaN, NaN), iff the given point
results in a "point at infinity" in homogeneous coordinates after applying
the transform
. For example, a RenderObject may set its transform to
the zero matrix to indicate its content is currently not visible. Trying
to convert an Offset
to its coordinate space always results in
(NaN, NaN).
Implementation
static Offset transformPoint(Matrix4 transform, Offset point) {
final Float64List storage = transform.storage;
final double x = point.dx;
final double y = point.dy;
// Directly simulate the transform of the vector (x, y, 0, 1),
// dropping the resulting Z coordinate, and normalizing only
// if needed.
final double rx = storage[0] * x + storage[4] * y + storage[12];
final double ry = storage[1] * x + storage[5] * y + storage[13];
final double rw = storage[3] * x + storage[7] * y + storage[15];
if (rw == 1.0) {
return Offset(rx, ry);
} else {
return Offset(rx / rw, ry / rw);
}
}