From a68d5b73e524dd36455db8d86489c8d5ea238703 Mon Sep 17 00:00:00 2001 From: Michael Fogleman Date: Sun, 21 Feb 2016 16:20:17 -0500 Subject: [PATCH] QuadraticBezier --- bezier.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/bezier.go b/bezier.go index 2d69cb8..f2cd7ab 100644 --- a/bezier.go +++ b/bezier.go @@ -2,6 +2,33 @@ package gg import "math" +func quadratic(x0, y0, x1, y1, x2, y2, t float64) (x, y float64) { + u := 1 - t + a := u * u + b := 2 * u * t + c := t * t + x = a*x0 + b*x1 + c*x2 + y = a*y0 + b*y1 + c*y2 + return +} + +func QuadraticBezier(x0, y0, x1, y1, x2, y2 float64) []Point { + l := (math.Hypot(x1-x0, y1-y0) + + math.Hypot(x2-x1, y2-y1)) + n := int(l + 0.5) + if n < 4 { + n = 4 + } + d := float64(n) - 1 + result := make([]Point, n) + for i := 0; i < n; i++ { + t := float64(i) / d + x, y := quadratic(x0, y0, x1, y1, x2, y2, t) + result[i] = Point{x, y} + } + return result +} + func cubic(x0, y0, x1, y1, x2, y2, x3, y3, t float64) (x, y float64) { u := 1 - t a := u * u * u