diff options
Diffstat (limited to 'vendor/github.com/fogleman/gg/examples/beziers.go')
| -rw-r--r-- | vendor/github.com/fogleman/gg/examples/beziers.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/vendor/github.com/fogleman/gg/examples/beziers.go b/vendor/github.com/fogleman/gg/examples/beziers.go new file mode 100644 index 0000000..e4cfa8d --- /dev/null +++ b/vendor/github.com/fogleman/gg/examples/beziers.go @@ -0,0 +1,84 @@ +package main + +import ( + "math/rand" + + "github.com/fogleman/gg" +) + +func random() float64 { + return rand.Float64()*2 - 1 +} + +func point() (x, y float64) { + return random(), random() +} + +func drawCurve(dc *gg.Context) { + dc.SetRGBA(0, 0, 0, 0.1) + dc.FillPreserve() + dc.SetRGB(0, 0, 0) + dc.SetLineWidth(12) + dc.Stroke() +} + +func drawPoints(dc *gg.Context) { + dc.SetRGBA(1, 0, 0, 0.5) + dc.SetLineWidth(2) + dc.Stroke() +} + +func randomQuadratic(dc *gg.Context) { + x0, y0 := point() + x1, y1 := point() + x2, y2 := point() + dc.MoveTo(x0, y0) + dc.QuadraticTo(x1, y1, x2, y2) + drawCurve(dc) + dc.MoveTo(x0, y0) + dc.LineTo(x1, y1) + dc.LineTo(x2, y2) + drawPoints(dc) +} + +func randomCubic(dc *gg.Context) { + x0, y0 := point() + x1, y1 := point() + x2, y2 := point() + x3, y3 := point() + dc.MoveTo(x0, y0) + dc.CubicTo(x1, y1, x2, y2, x3, y3) + drawCurve(dc) + dc.MoveTo(x0, y0) + dc.LineTo(x1, y1) + dc.LineTo(x2, y2) + dc.LineTo(x3, y3) + drawPoints(dc) +} + +func main() { + const ( + S = 256 + W = 8 + H = 8 + ) + dc := gg.NewContext(S*W, S*H) + dc.SetRGB(1, 1, 1) + dc.Clear() + for j := 0; j < H; j++ { + for i := 0; i < W; i++ { + x := float64(i)*S + S/2 + y := float64(j)*S + S/2 + dc.Push() + dc.Translate(x, y) + dc.Scale(S/2, S/2) + if j%2 == 0 { + randomCubic(dc) + } else { + randomQuadratic(dc) + } + dc.Pop() + } + } + dc.SavePNG("out.png") +} |
