public Perspective multiply(Affine a)
{
Perspective b = new Perspective(this);
sx = a.sx * b.sx + a.shx * b.shy + a.tx * b.w0;
shx = a.sx * b.shx + a.shx * b.sy + a.tx * b.w1;
tx = a.sx * b.tx + a.shx * b.ty + a.tx * b.w2;
shy = a.shy * b.sx + a.sy * b.shy + a.ty * b.w0;
sy = a.shy * b.shx + a.sy * b.sy + a.ty * b.w1;
ty = a.shy * b.tx + a.sy * b.ty + a.ty * b.w2;
return this;
}