geom.go
func (g *GeoM) Concat(other GeoM) {
	a := (other.a_1+1)*(g.a_1+1) + other.b*g.c
	b := (other.a_1+1)*g.b + other.b*(g.d_1+1)
	tx := (other.a_1+1)*g.tx + other.b*g.ty + other.tx
	c := other.c*(g.a_1+1) + (other.d_1+1)*g.c
	d := other.c*g.b + (other.d_1+1)*(g.d_1+1)
	ty := other.c*g.tx + (other.d_1+1)*g.ty + other.ty

	g.a_1 = a - 1
	g.b = b
	g.c = c
	g.d_1 = d - 1
	g.tx = tx
	g.ty = ty
}
func (g *GeoM) Concat(other GeoM) {
	a := (other.a_1+1)*(g.a_1+1) + other.b*g.c
	b := (other.a_1+1)*g.b + other.b*(g.d_1+1)
	tx := (other.a_1+1)*g.tx + other.b*g.ty + other.tx
	c := other.c*(g.a_1+1) + (other.d_1+1)*g.c
	d := other.c*g.b + (other.d_1+1)*(g.d_1+1)
	ty := other.c*g.tx + (other.d_1+1)*g.ty + other.ty

	g.a_1 = a - 1
	g.b = b
	g.c = c
	g.d_1 = d - 1
	g.tx = tx
	g.ty = ty
}
// Concat multiplies a geometry matrix with the other geometry matrix.
// This is same as muptiplying the matrix other and the matrix g in this order.