The obvious way to program a deformation
is to take each point from the input space
and find where it goes on the output space.
Naturally, many points could land in the same place,
and then only the last would be seen.
Alternately, we could first erase the output space,
then add in points, and finally divide by the number of points
that ended up in each place.
The biggest aggravation is that some places could end up with no points.
This happens where the transformation stretches.
There we need to decide whether to interpolate the missing points,
or simply low-pass filter the output.