From 9ade2466babeaa9460d9a3a29a0d7dcea3e92d1b Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Tue, 13 Oct 2026 22:53:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96):=20?= =?UTF-8?q?=E9=99=8D=E4=BD=8E=E6=9B=B2=E7=BA=BF=E6=8F=8F=E8=BE=B9=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=BC=80=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ofdgo_geom_stroke.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ofdgo_geom_stroke.go b/ofdgo_geom_stroke.go index 23655d5..dd4fbda 100644 --- a/ofdgo_geom_stroke.go +++ b/ofdgo_geom_stroke.go @@ -144,18 +144,18 @@ func (p GeometryPath) strokePolylines(tolerance float64) ([]geometryPolyline, er if depth == 24 { return fmt.Errorf("stroke curve tolerance cannot be met") } - work := append([]Point(nil), points...) - left, right := make([]Point, len(points)), make([]Point, len(points)) + var work, left, right [4]Point + copy(work[:], points) for n := len(points); n > 0; n-- { left[len(points)-n], right[n-1] = work[0], work[n-1] for i := 0; i < n-1; i++ { work[i] = geometryLerp(work[i], work[i+1], .5) } } - if err := flatten(left, budget/2, depth+1); err != nil { + if err := flatten(left[:len(points)], budget/2, depth+1); err != nil { return err } - return flatten(right, budget/2, depth+1) + return flatten(right[:len(points)], budget/2, depth+1) } for _, s := range curves { switch s.Verb { @@ -175,7 +175,8 @@ func (p GeometryPath) strokePolylines(tolerance float64) ([]geometryPolyline, er line.points = []Point{current} default: drawn = true - points := []Point{current} + var buffer [4]Point + points := append(buffer[:0], current) if s.Verb == GeometryQuad || s.Verb == GeometryCubic { points = append(points, s.Control1) }