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
}
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.
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 .