package canvas import "math" // Save 保存当前状态 func (c *Context) Save() { // 深拷贝当前状态 copyState := *c.state c.states = append(c.states, ©State) } // Restore 恢复上一个状态 func (c *Context) Restore() { if len(c.states) > 0 { lastIndex := len(c.states) - 1 c.state = c.states[lastIndex] c.states = c.states[:lastIndex] } } // Translate 平移变换 func (c *Context) Translate(x, y float64) { c.state.transform[4] += x*c.state.transform[0] + y*c.state.transform[2] c.state.transform[5] += x*c.state.transform[1] + y*c.state.transform[3] } // Rotate 旋转变换 func (c *Context) Rotate(angle float64) { sin, cos := math.Sin(angle), math.Cos(angle) c.Transform(cos, sin, -sin, cos, 0, 0) } // Scale 缩放变换 func (c *Context) Scale(sx, sy float64) { c.Transform(sx, 0, 0, sy, 0, 0) } // Transform 应用变换矩阵 func (c *Context) Transform(a, b, cVal, d, e, f float64) { newMatrix := [6]float64{ a*c.state.transform[0] + cVal*c.state.transform[1], b*c.state.transform[0] + d*c.state.transform[1], a*c.state.transform[2] + cVal*c.state.transform[3], b*c.state.transform[2] + d*c.state.transform[3], a*c.state.transform[4] + cVal*c.state.transform[5] + e, b*c.state.transform[4] + d*c.state.transform[5] + f, } c.state.transform = newMatrix } // SetTransform 设置变换矩阵 func (c *Context) SetTransform(a, b, c1, d, e, f float64) { c.state.transform = [6]float64{a, b, c1, d, e, f} }