summaryrefslogtreecommitdiff
path: root/vendor/github.com/fogleman/gg/examples/beziers.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/fogleman/gg/examples/beziers.go')
-rw-r--r--vendor/github.com/fogleman/gg/examples/beziers.go84
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")
+}