package canvas import ( "image" "math" ) // 变换点坐标 func (c *Context) transformPoint(x, y float64) image.Point { // 应用变换矩阵 [a, b, c, d, e, f] // | a c e | | x | // | b d f | * | y | // | 0 0 1 | | 1 | tx := x*c.state.transform[0] + y*c.state.transform[2] + c.state.transform[4] ty := x*c.state.transform[1] + y*c.state.transform[3] + c.state.transform[5] return image.Point{X: int(tx), Y: int(ty)} } // 计算两点之间的距离 func distance(x1, y1, x2, y2 float64) float64 { dx := x2 - x1 dy := y2 - y1 return math.Sqrt(dx*dx + dy*dy) } // 计算贝塞尔曲线点 func bezierPoint(t float64, p0, p1, p2, p3 float64) float64 { u := 1 - t tt := t * t uu := u * u uuu := uu * u ttt := tt * t // (1-t)^3 * P0 + 3 * (1-t)^2 * t * P1 + 3 * (1-t) * t^2 * P2 + t^3 * P3 return uuu*p0 + 3*uu*t*p1 + 3*u*tt*p2 + ttt*p3 } // 计算二次贝塞尔曲线点 func quadraticPoint(t float64, p0, p1, p2 float64) float64 { u := 1 - t return u*u*p0 + 2*u*t*p1 + t*t*p2 } // 计算椭圆上的点 func ellipsePoint(cx, cy, rx, ry, angle float64) (float64, float64) { x := cx + rx*math.Cos(angle) y := cy + ry*math.Sin(angle) return x, y } // 计算圆上的点 func circlePoint(cx, cy, r, angle float64) (float64, float64) { return ellipsePoint(cx, cy, r, r, angle) }