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 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 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 GraphUpdater(dc *gg.Context) { ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() for { select { case job := <-Queue: intVal, _ := strconv.Atoi(job) dc.DrawCircle(float64(TimerVal), float64(1000-(intVal)), 5) dc.Fill() dc.SavePNG("out.png") if TimerVal >= 1000 { TimerVal = 0 dc.Clear() } case <-ticker.C: TimerVal = TimerVal + 1 } } }
func drawStartPoint(dc *gg.Context) { dc.SetRGBA(0, 1, 0, 1) dc.SetLineWidth(20) dc.Stroke() }
func drawPoints(dc *gg.Context) { dc.SetRGBA(1, 0, 0, 1) dc.SetLineWidth(2) dc.Stroke() }
func (m *Marker) draw(gc *gg.Context, trans *transformer) { gc.ClearPath() gc.SetLineJoin(gg.LineJoinRound) gc.SetLineWidth(1.0) radius := 0.5 * m.Size x, y := trans.ll2p(m.Position) gc.DrawArc(x, y-m.Size, radius, (90.0+60.0)*math.Pi/180.0, (360.0+90.0-60.0)*math.Pi/180.0) gc.LineTo(x, y) gc.ClosePath() gc.SetColor(m.Color) gc.FillPreserve() gc.SetRGB(0, 0, 0) gc.Stroke() if m.Label != "" { if Luminance(m.Color) >= 0.5 { gc.SetColor(color.RGBA{0x00, 0x00, 0x00, 0xff}) } else { gc.SetColor(color.RGBA{0xff, 0xff, 0xff, 0xff}) } gc.DrawStringAnchored(m.Label, x, y-m.Size, 0.5, 0.5) } }
func (p *Path) draw(gc *gg.Context, trans *transformer) { if len(p.Positions) <= 1 { return } gc.ClearPath() gc.SetLineWidth(p.Weight) gc.SetLineCap(gg.LineCapRound) gc.SetLineJoin(gg.LineJoinRound) for _, ll := range p.Positions { gc.LineTo(trans.ll2p(ll)) } gc.SetColor(p.Color) gc.Stroke() }