Skip to content

Instantly share code, notes, and snippets.

@kortschak
Created September 1, 2016 02:53
Show Gist options
  • Save kortschak/2ba3e457b134fe8a9ce45f67221fd5fe to your computer and use it in GitHub Desktop.
Save kortschak/2ba3e457b134fe8a9ce45f67221fd5fe to your computer and use it in GitHub Desktop.
updated test cases
// Copyright ©2013 The bíogo Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package rings_test
import (
"flag"
"fmt"
"image/color"
"math"
"math/rand"
"reflect"
"testing"
"github.com/gonum/plot"
"github.com/gonum/plot/palette"
"github.com/gonum/plot/plotter"
"github.com/gonum/plot/vg"
"github.com/gonum/plot/vg/draw"
"github.com/biogo/biogo/feat"
"github.com/biogo/graphics/rings"
"gopkg.in/check.v1"
)
var pics = flag.Bool("pic", false, "Show the graphics generated by failing tests.")
var allPics = flag.Bool("allpic", false, "Show the graphics generated by all tests.")
type failure bool
func (f failure) String() string {
if f {
return "fail"
}
return "ok"
}
// fs is a feat.Feature implementation for testing.
type fs struct {
start, end int
name string
location feat.Feature
orient feat.Orientation
style draw.LineStyle
scores []float64
}
func (f *fs) Start() int { return f.start }
func (f *fs) End() int { return f.end }
func (f *fs) Len() int { return f.end - f.start }
func (f *fs) Name() string { return f.name }
func (f *fs) Description() string { return "bogus" }
func (f *fs) Location() feat.Feature { return f.location }
func (f *fs) Orientation() feat.Orientation { return f.orient }
func (f *fs) LineStyle() draw.LineStyle { return f.style }
func (f *fs) Scores() []float64 { return f.scores }
type fp struct {
feats [2]*fs
sty draw.LineStyle
}
func (p fp) Features() [2]feat.Feature { return [2]feat.Feature{p.feats[0], p.feats[1]} }
func (p fp) LineStyle() draw.LineStyle {
var col color.RGBA
for _, f := range p.feats {
r, g, b, a := f.style.Color.RGBA()
col.R += byte(r / 2)
col.G += byte(g / 2)
col.B += byte(b / 2)
col.A += byte(a / 2)
}
p.sty.Color = col
return p.sty
}
func randomFeatures(n, min, max int, single bool, sty draw.LineStyle) []feat.Feature {
data := make([]feat.Feature, n)
for i := range data {
start := rand.Intn(max-min) + min
var end int
if !single {
end = rand.Intn(max - start)
}
data[i] = &fs{
start: start,
end: start + end,
name: fmt.Sprintf("feature%v", i),
style: sty,
}
}
return data
}
// Tests
func Test(t *testing.T) { check.TestingT(t) }
type S struct{}
var _ = check.Suite(&S{})
var base = newCanvas(
72,
[]interface{}{
setColor{col: color.Gray16{Y: 0xffff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 300, Y: 0}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 300, Y: 300}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 0, Y: 300}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 0},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 5, Y: 0}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 300, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 0},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 0, Y: 5}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 0, Y: 300}, Radius: 0, Start: 0, Angle: 0},
}},
},
)
func (s *S) TestNew(c *check.C) {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append()
c.Check(tc.actions, check.DeepEquals, base.actions)
}
func (s *S) TestHighlight(c *check.C) {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
h := rings.NewHighlight(
color.NRGBA{R: 0xf3, G: 0xf3, B: 0x15, A: 0xff},
rings.Arc{0, rings.Complete / 2 * rings.Clockwise},
30, 120,
)
h.LineStyle = plotter.DefaultLineStyle
p.Add(h)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(
setColor{col: color.NRGBA{R: 0xf3, G: 0xf3, B: 0x15, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 182.5, Y: 152.5}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 30, Start: 0, Angle: -math.Pi},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 120, Start: -math.Pi, Angle: math.Pi},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 182.5, Y: 152.5}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 30, Start: 0, Angle: -math.Pi},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 120, Start: -math.Pi, Angle: math.Pi},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
)
c.Check(tc.actions, check.DeepEquals, base.actions)
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("highlight-%s.svg", failure(!ok))), check.Equals, nil)
}
}
func (s *S) TestBlocks(c *check.C) {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
b.LineStyle = plotter.DefaultLineStyle
b.Color = color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}
p.Add(b)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 232.46052482925853, Y: 149.98713927374973}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 6.2517693806436885, Angle: -1.7009436868899361},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 4.550825693753753, Angle: 1.7009436868899361},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 232.46052482925853, Y: 149.98713927374973}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 6.2517693806436885, Angle: -1.7009436868899361},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 4.550825693753753, Angle: 1.7009436868899361},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 134.69866343184597, Y: 74.50568984607081}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 4.487993840681956, Angle: -1.367794789850083},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 3.1201990508318733, Angle: 1.367794789850083},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 134.69866343184597, Y: 74.50568984607081}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 4.487993840681956, Angle: -1.367794789850083},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 3.1201990508318733, Angle: 1.367794789850083},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 72.78358939002953, Y: 159.230072768001}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 3.057367197760077, Angle: -3.0259512712241787},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 0.0314159265358982, Angle: 3.0259512712241787},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 72.78358939002953, Y: 159.230072768001}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 80, Start: 3.057367197760077, Angle: -3.0259512712241787},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 100, Start: 0.0314159265358982, Angle: 3.0259512712241787},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
)
c.Check(tc.actions, check.DeepEquals, base.actions)
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("blocks-%s.svg", failure(!ok))), check.Equals, nil)
}
}
func (s *S) TestBlocksScale(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
font, err := vg.MakeFont("Helvetica", 5)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
feats []feat.Feature
grid draw.LineStyle
inner vg.Length
outer vg.Length
actions []interface{}
}{
{
feats: b.Set,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.4457216402305, Y: 149.04481650140588}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 6.2517693806436885, Angle: -1.7009436868899357},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.3290023868793, Y: 146.36891243718895}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 265.3243388156124, Y: 146.20170095820322}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 245.50327522917544, Y: 93.75997278987488}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 248.03972818997113, Y: 92.15797204778056}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 205.2283815234374, Y: 55.96131458364049}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 206.66642829225842, Y: 53.32844134501249}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 151.6589388127897, Y: 42.503215428452776}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.63600078041122, Y: 39.50330312195604}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 257.27193490354546, Y: 118.99117046855808}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 258.7006431067756, Y: 118.53423188403842}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 227.77691269913558, Y: 72.29160633395828}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 228.80341605412377, Y: 71.19785551123954}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 179.30211952693816, Y: 45.8152007600721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 179.66760297503276, Y: 44.360408043163986}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.656622921172369},
fillString{font: "Helvetica", size: 5, x: -167.78433635070704, y: 260.82918038819696, str: "8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.149064136880077},
fillString{font: "Helvetica", size: 5, x: -219.4778418760758, y: 164.56748322669478, str: "8.4e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.641505352587785},
fillString{font: "Helvetica", size: 5, x: -216.04487902449114, y: 56.32914989418752, str: "8.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.1339465682954932},
fillString{font: "Helvetica", size: 5, x: -160.43597091351256, y: -36.59539678344792, str: "9.2e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.0231622187882, Y: 45.25782353834737}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.18503453050306, Y: 53.67862522874255}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 102.86735365406224, Y: 50.98349682589007}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 70.9273349616073, Y: 78.70365646907574}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 68.70262591510568, Y: 76.69102891823235}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 49.34819004399671, Y: 114.29392583893788}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 46.534958863378435, Y: 113.25194199818165}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.07926421412347, Y: 48.358886714289795}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 116.5962541806797, Y: 46.938780624030116}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 92.06768065037733, Y: 60.58735245884155}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 91.24360356833702, Y: 59.33399817418939}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 80.92204239077553, Y: 68.97398019483948}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 79.94597933246793, Y: 67.8349890156782}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 62.24426729206817, Y: 89.61993389511773}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 61.01350730059637, Y: 88.76247844823297}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 55.01245792699254, Y: 101.54728524834422}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 53.68308235326971, Y: 100.85247550173074}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 45.34254168939712, Y: 127.65489729521317}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 43.88130362152526, Y: 127.31610044014789}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 43.05992129759416, Y: 141.4153631718844}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 41.567556588015904, Y: 141.2642090333192}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.6868546486056104},
fillString{font: "Helvetica", size: 5, x: -79.12669457175892, y: -86.91830958803449, str: "7.5e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.3061855603863917},
fillString{font: "Helvetica", size: 5, x: 1.674364050126691, y: -98.33178158899622, str: "7.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.9255164721671725},
fillString{font: "Helvetica", size: 5, x: 80.93196113048663, y: -78.90726814382934, str: "8.1e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 42.88993541129061, Y: 161.75385005600137}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 3.057367197760077, Angle: -3.0259512712241787},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.38796596153168, Y: 232.86281691556098}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 75.33945594230073, Y: 235.0545301041672}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 153.56695424658352, Y: 262.494825372086}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.59605299876307, Y: 265.4946842458702}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 229.1567991267251, Y: 231.39065310697407}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 231.24743910290852, Y: 233.5422163735279}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.41882367937944, Y: 156.7251864978364}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 265.4166097797261, Y: 156.8404188568683}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 47.79710142161237, Y: 186.22392369348316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 46.36933462281618, Y: 186.68379538021247}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 59.61755231344189, Y: 211.4308994649988}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 58.350973481352455, Y: 212.2345026395215}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 99.9699862824344, Y: 249.14676745154165}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 99.2536679135585, Y: 250.46467791678992}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.9170301679626, Y: 259.2396164266529}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.55453512479843, Y: 260.69515665065273}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 181.14853023374124, Y: 258.70386864632763}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 181.5391920096559, Y: 260.1521032187776}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 206.89490815971536, Y: 248.1095913927893}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 207.63665690734786, Y: 249.41335854814554}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 246.50812721368118, Y: 209.61805334372258}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 247.79005622114045, Y: 210.3969358893188}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 257.8373825663489, Y: 184.18652448708525}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 259.2738014195264, Y: 184.6186134573637}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 0.7516384402795491},
fillString{font: "Helvetica", size: 5, x: 206.43823441922245, y: 124.34565655261707, str: "3.6e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.009699736158889083},
fillString{font: "Helvetica", size: 5, x: 141.90719420240123, y: 271.0381747625305, str: "4.2e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.7710379125973268},
fillString{font: "Helvetica", size: 5, x: -6.009511385336623, y: 332.71149361518525, str: "4.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -1.5323760890357647},
fillString{font: "Helvetica", size: 5, x: -155.6362604960028, y: 275.3112671277879, str: "5.4e+05"},
pop{},
},
},
{
feats: b.Set,
grid: plotter.DefaultGridLineStyle,
inner: b.Inner - 5,
outer: b.Outer + 5,
actions: []interface{}{
setColor{col: color.Gray{Y: 0x80}},
setWidth{w: 0.25},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 227.38341071832681, Y: 148.31971302535612}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 257.33677500565756, Y: 146.64759823549855}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 215.91132401989233, Y: 112.44998144764196}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 241.2758536278493, Y: 96.42997402669874}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 188.45116922052551, Y: 86.67816903430034}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 202.8316369087357, Y: 60.34943664802046}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 151.92654919053842, Y: 77.50219233758145}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.6971688667538, Y: 47.50306927261401}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 223.9354101615083, Y: 129.65307077401687}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 252.50957422611157, Y: 120.51429908362363}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 203.82516774941064, Y: 97.81245886406248}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 224.35523484917488, Y: 75.93744240968746}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 170.77417240473056, Y: 79.76036415459461}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 178.08384136662278, Y: 50.66450981643246}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.4457216402305, Y: 149.04481650140588}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 6.2517693806436885, Angle: -1.7009436868899357},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.3290023868793, Y: 146.36891243718895}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 265.3243388156124, Y: 146.20170095820322}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 245.50327522917544, Y: 93.75997278987488}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 248.03972818997113, Y: 92.15797204778056}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 205.2283815234374, Y: 55.96131458364049}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 206.66642829225842, Y: 53.32844134501249}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 151.6589388127897, Y: 42.503215428452776}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.63600078041122, Y: 39.50330312195604}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 257.27193490354546, Y: 118.99117046855808}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 258.7006431067756, Y: 118.53423188403842}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 227.77691269913558, Y: 72.29160633395828}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 228.80341605412377, Y: 71.19785551123954}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 179.30211952693816, Y: 45.8152007600721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 179.66760297503276, Y: 44.360408043163986}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.656622921172369},
fillString{font: "Helvetica", size: 5, x: -167.78433635070704, y: 260.82918038819696, str: "8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.149064136880077},
fillString{font: "Helvetica", size: 5, x: -219.4778418760758, y: 164.56748322669478, str: "8.4e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.641505352587785},
fillString{font: "Helvetica", size: 5, x: -216.04487902449114, y: 56.32914989418752, str: "8.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.1339465682954932},
fillString{font: "Helvetica", size: 5, x: -160.43597091351256, y: -36.59539678344792, str: "9.2e+05"},
pop{},
setColor{col: color.Gray{Y: 0x80}},
setWidth{w: 0.25},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 119.55797808897937, Y: 85.1217899286881}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 106.38116932457112, Y: 58.17050590016335}, Radius: 0, Start: 0, Angle: 0}}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 96.88227383745954, Y: 102.18431122891528}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 74.63518337244334, Y: 82.05803572048139}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.1692204845432, Y: 126.45040398109401}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 54.03690867836049, Y: 116.03056557353162}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.34949832781146, Y: 81.49469548701578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 118.68929765893604, Y: 53.09257368182209}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.29614589798454, Y: 89.83228576739197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 94.81460425717836, Y: 64.76520007434874}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 103.69684708461969, Y: 95.55044104193601}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.17558591846756, Y: 72.77061745871042}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.96200042641013, Y: 109.62722765576208}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 66.34680059697416, Y: 92.47811871806692}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 86.03122131385855, Y: 117.7595126693256}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 59.44370983940196, Y: 103.86331773705585}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 79.43809660640713, Y: 135.56015724673625}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 50.21333524896998, Y: 128.78422014543077}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.88176452108692, Y: 144.94229307173936}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 48.034470329521696, Y: 141.9192103004351}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.0231622187882, Y: 45.25782353834737}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.18503453050306, Y: 53.67862522874255}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 102.86735365406224, Y: 50.98349682589007}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 70.9273349616073, Y: 78.70365646907574}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 68.70262591510568, Y: 76.69102891823235}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 49.34819004399671, Y: 114.29392583893788}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 46.534958863378435, Y: 113.25194199818165}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.07926421412347, Y: 48.358886714289795}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 116.5962541806797, Y: 46.938780624030116}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 92.06768065037733, Y: 60.58735245884155}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 91.24360356833702, Y: 59.33399817418939}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 80.92204239077553, Y: 68.97398019483948}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 79.94597933246793, Y: 67.8349890156782}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 62.24426729206817, Y: 89.61993389511773}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 61.01350730059637, Y: 88.76247844823297}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 55.01245792699254, Y: 101.54728524834422}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 53.68308235326971, Y: 100.85247550173074}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 45.34254168939712, Y: 127.65489729521317}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 43.88130362152526, Y: 127.31610044014789}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 43.05992129759416, Y: 141.4153631718844}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 41.567556588015904, Y: 141.2642090333192}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.6868546486056104},
fillString{font: "Helvetica", size: 5, x: -79.12669457175892, y: -86.91830958803449, str: "7.5e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.3061855603863917},
fillString{font: "Helvetica", size: 5, x: 1.674364050126691, y: -98.33178158899622, str: "7.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.9255164721671725},
fillString{font: "Helvetica", size: 5, x: 80.93196113048663, y: -78.90726814382934, str: "8.1e+05"},
pop{},
setColor{col: color.Gray{Y: 0x80}},
setWidth{w: 0.25},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.28724951922615, Y: 207.29282971515522}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 80.8021493269166, Y: 229.20996160121732}, Radius: 0, Start: 0, Angle: 0}}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 153.22746880448875, Y: 227.49647184460412}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.51845632628425, Y: 257.4950605824457}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 204.7659994045853, Y: 206.28908166384596}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 225.6723991664194, Y: 227.80471432938435}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 227.4446525086678, Y: 155.38080897579755}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 257.4225135121349, Y: 156.53313256611656}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 81.11166006019026, Y: 175.4935843364658}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 52.556324084266365, Y: 184.6910180710521}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.17105839552856, Y: 192.68015872613555}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 63.839481753739975, Y: 208.75222221658976}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.68408155620529, Y: 218.39552326241477}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 102.35771417868739, Y: 244.75373256738067}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 134.37524784179269, Y: 225.27701119999062}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 127.12534697850974, Y: 254.38781567998686}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 172.03308879573265, Y: 224.91172862249613}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 179.8463243140257, Y: 253.87642007149458}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 189.5874373816241, Y: 217.68835776781088}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 204.42241233427376, Y: 243.76370087493524}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 216.59645037296443, Y: 191.44412727981086}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 242.2350305221502, Y: 207.0217781917352}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 224.32094265887423, Y: 174.10444851392177}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 253.04931972242395, Y: 182.74622791949048}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 42.88993541129061, Y: 161.75385005600137}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 110, Start: 3.057367197760077, Angle: -3.0259512712241787},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.38796596153168, Y: 232.86281691556098}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 75.33945594230073, Y: 235.0545301041672}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 153.56695424658352, Y: 262.494825372086}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.59605299876307, Y: 265.4946842458702}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 229.1567991267251, Y: 231.39065310697407}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 231.24743910290852, Y: 233.5422163735279}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 262.41882367937944, Y: 156.7251864978364}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 265.4166097797261, Y: 156.8404188568683}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 47.79710142161237, Y: 186.22392369348316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 46.36933462281618, Y: 186.68379538021247}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 59.61755231344189, Y: 211.4308994649988}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 58.350973481352455, Y: 212.2345026395215}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 99.9699862824344, Y: 249.14676745154165}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 99.2536679135585, Y: 250.46467791678992}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.9170301679626, Y: 259.2396164266529}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.55453512479843, Y: 260.69515665065273}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 181.14853023374124, Y: 258.70386864632763}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 181.5391920096559, Y: 260.1521032187776}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 206.89490815971536, Y: 248.1095913927893}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 207.63665690734786, Y: 249.41335854814554}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 246.50812721368118, Y: 209.61805334372258}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 247.79005622114045, Y: 210.3969358893188}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 257.8373825663489, Y: 184.18652448708525}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 259.2738014195264, Y: 184.6186134573637}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 0.7516384402795491},
fillString{font: "Helvetica", size: 5, x: 206.43823441922245, y: 124.34565655261707, str: "3.6e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.009699736158889083},
fillString{font: "Helvetica", size: 5, x: 141.90719420240123, y: 271.0381747625305, str: "4.2e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.7710379125973268},
fillString{font: "Helvetica", size: 5, x: -6.009511385336623, y: 332.71149361518525, str: "4.8e+05"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -1.5323760890357647},
fillString{font: "Helvetica", size: 5, x: -155.6362604960028, y: 275.3112671277879, str: "5.4e+05"},
pop{},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
s, err := rings.NewScale(t.feats, b, 110)
c.Assert(err, check.Equals, nil)
s.LineStyle = plotter.DefaultLineStyle
s.Tick.Length = 3
s.Tick.LineStyle = plotter.DefaultLineStyle
s.Tick.Label = draw.TextStyle{Color: color.Gray16{0}, Font: font}
s.Grid.LineStyle = t.grid
s.Grid.Inner = t.inner
s.Grid.Outer = t.outer
p.Add(s)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("scale-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestLabelsBlocks(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
font, err := vg.MakeFont("Helvetica", 10)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
feats []feat.Feature
placement rings.TextPlacement
actions []interface{}
}{
{
feats: b.Set,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.830501210403824},
fillString{font: "Helvetica", size: 10, x: -233.01155605316876, y: 84.52288965789225, str: "feature0"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.2333001189620183},
fillString{font: "Helvetica", size: 10, x: 8.090496656616615, y: -108.74070751750412, str: "feature1"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.026404764646908996},
fillString{font: "Helvetica", size: 10, x: 130.07341402421386, y: 261.77339238481545, str: "feature2"},
pop{},
},
},
{
feats: b.Set[1:],
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 2.2333001189620183},
fillString{font: "Helvetica", size: 10, x: 8.090496656616615, y: -108.74070751750412, str: "feature1"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.026404764646908996},
fillString{font: "Helvetica", size: 10, x: 130.07341402421386, y: 261.77339238481545, str: "feature2"},
pop{},
},
},
{
feats: b.Set,
placement: rings.Radial,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 5.401297537198721},
fillString{font: "Helvetica", size: 10, x: 70.87542872039222, y: 209.9646810531688, str: "feature0"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.804096445756915},
fillString{font: "Helvetica", size: 10, x: -122.38816845500412, y: -31.137371656616615, str: "feature1"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.5443915621479876},
fillString{font: "Helvetica", size: 10, x: 248.12593144731545, y: -153.12028902421383, str: "feature2"},
pop{},
},
},
{
feats: b.Set,
placement: func(a rings.Angle) (rot rings.Angle, xalign, yalign float64) {
return a, 0, -0.5
},
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 5.401297537198721},
fillString{font: "Helvetica", size: 10, x: 89.22259668914222, y: 209.9646810531688, str: "feature0"},
pop{}, setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.804096445756915},
fillString{font: "Helvetica", size: 10, x: -104.04100048625412, y: -31.137371656616615, str: "feature1"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.5443915621479876},
fillString{font: "Helvetica", size: 10, x: 266.47309941606545, y: -153.12028902421383, str: "feature2"},
pop{},
},
},
{
feats: b.Set,
placement: rings.Horizontal,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
fillString{font: "Helvetica", size: 10, x: 215.74248908596053, y: 59.10442792299643, str: "feature0"},
setColor{col: color.Gray16{Y: 0x0}},
fillString{font: "Helvetica", size: 10, x: 32.95691195262061, y: 77.12617831374112, str: "feature1"},
setColor{col: color.Gray16{Y: 0x0}},
fillString{font: "Helvetica", size: 10, x: 137.54141500264052, y: 262.66014286751687, str: "feature2"},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
l, err := rings.NewLabels(b, 110, rings.NameLabels(t.feats)...)
c.Assert(err, check.Equals, nil)
l.TextStyle = draw.TextStyle{Color: color.Gray16{0}, Font: font}
l.Placement = t.placement
p.Add(l)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("labels-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestLabelsArcs(c *check.C) {
a := rings.Arc{Theta: -0.031415926535897934, Phi: -1.7009436868899361} // This is feature0 from the blocks test.
h := rings.NewHighlight(
color.NRGBA{R: 243, G: 243, B: 21, A: 128},
a,
80, 100,
)
h.LineStyle = plotter.DefaultLineStyle
font, err := vg.MakeFont("Helvetica", 10)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
arc rings.Arcer
label rings.Label
placement rings.TextPlacement
actions []interface{}
}{
{
arc: a,
label: "Label",
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -2.4526840967757626},
fillString{font: "Helvetica", size: 10, x: -226.8982748031688, y: 84.52288965789216, str: "Label"},
pop{},
},
},
{
arc: h,
label: "Label",
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -2.4526840967757626},
fillString{font: "Helvetica", size: 10, x: -226.8982748031688, y: 84.52288965789216, str: "Label"},
pop{},
},
},
{
arc: h,
label: "Label",
placement: rings.Radial,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.881887769980866},
fillString{font: "Helvetica", size: 10, x: 76.98870997039216, y: 209.9646810531688, str: "Label"},
pop{},
},
},
{
arc: h,
label: "Label",
placement: func(a rings.Angle) (rot rings.Angle, xalign, yalign float64) {
return a, 0, -0.5
},
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: -0.881887769980866},
fillString{font: "Helvetica", size: 10, x: 89.22259668914216, y: 209.9646810531688, str: "Label"},
pop{},
},
},
{
arc: h,
label: "Label",
placement: rings.Horizontal,
actions: []interface{}{
setColor{col: color.Gray16{Y: 0x0}},
fillString{font: "Helvetica", size: 10, x: 217.96958781584493, y: 59.10442792299643, str: "Label"},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
l, err := rings.NewLabels(t.arc, 110, t.label)
c.Assert(err, check.Equals, nil)
l.TextStyle = draw.TextStyle{Color: color.Gray16{0}, Font: font}
l.Placement = t.placement
p.Add(l)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(h)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("labels-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestLabelSpokes(c *check.C) {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
m := randomFeatures(10, b.Set[1].Start(), b.Set[1].End(), true, plotter.DefaultLineStyle)
for _, mf := range m {
mf.(*fs).location = b.Set[1]
}
ms, err := rings.NewSpokes(m, b, 73, 78)
c.Assert(err, check.Equals, nil)
ms.LineStyle = plotter.DefaultLineStyle
font, err := vg.MakeFont("Helvetica", 10)
c.Assert(err, check.Equals, nil)
l, err := rings.NewLabels(ms, 125, rings.NameLabels([]feat.Feature{m[1], m[5], m[9]})...)
c.Assert(err, check.Equals, nil)
l.TextStyle = draw.TextStyle{Color: color.Gray16{0}, Font: font}
l.Placement = rings.Radial
p.Add(l)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.2234542023088135},
fillString{font: "Helvetica", size: 10, x: -99.60637951470011, y: 58.305353499178814, str: "feature1"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 3.909820940524999},
fillString{font: "Helvetica", size: 10, x: -108.98294710980127, y: -8.402510595005197, str: "feature5"},
pop{},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 4.113415457874245},
fillString{font: "Helvetica", size: 10, x: -105.27790643446565, y: 35.27356020294578, str: "feature9"},
pop{})
c.Check(tc.actions, check.DeepEquals, base.actions)
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b, ms)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("labelspokes-%s.svg", failure(!ok))), check.Equals, nil)
}
}
func (s *S) TestSpokes(c *check.C) {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
m := randomFeatures(10, b.Set[1].Start(), b.Set[1].End(), true, plotter.DefaultLineStyle)
for _, mf := range m {
mf.(*fs).location = b.Set[1]
}
ms, err := rings.NewSpokes(m, b, 73, 78)
c.Assert(err, check.Equals, nil)
ms.LineStyle = plotter.DefaultLineStyle
p.Add(ms)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 88.01347691001654, Y: 118.28759961994731}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 83.596591766867, Y: 115.94428452542314}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 118.21294090448178, Y: 88.05314143745684}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 115.8645121993093, Y: 83.6389730427621}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 80.97439251045306, Y: 137.90248400407566}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 76.07537829884025, Y: 136.90265414134112}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 81.8483994975755, Y: 134.13287321201787}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 77.00924877823135, Y: 132.87485082927938}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.72319085921325, Y: 84.99112003627741}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 122.82066968518674, Y: 80.3672241483512}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.00256872966926, Y: 101.77505830445045}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 96.40685425909868, Y: 98.3007472294128}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.97379980140269, Y: 114.82408874725218}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 85.69118334944397, Y: 112.24354688062562}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 95.34966934773948, Y: 107.08150479884551}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 91.43526313868054, Y: 103.97064896315}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 102.38779948295821, Y: 99.41735350098115}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 98.95545698179097, Y: 95.7815557955689}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.3429659019641, Y: 92.20822158657857}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.52399096374245, Y: 88.0786477226456}, Radius: 0, Start: 0, Angle: 0},
}},
)
c.Check(tc.actions, check.DeepEquals, base.actions)
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("spokes-%s.svg", failure(!ok))), check.Equals, nil)
}
}
func floatPtr(f float64) *float64 { return &f }
func (s *S) TestLinks(c *check.C) {
const marks = 16
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
ends [2]feat.Feature
bezier *rings.Bezier
actions []interface{}
}{
{
ends: [2]feat.Feature{b.Set[1], b.Set[1]},
bezier: &rings.Bezier{Segments: 5,
Radius: rings.LengthDist{Length: 2 * 70 / 3, Min: floatPtr(0.95), Max: floatPtr(1.05)},
Crest: &rings.FactorDist{Factor: 2, Min: floatPtr(0.7), Max: floatPtr(1.4)},
},
actions: []interface{}{
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.94890965035401, Y: 144.58508805005508}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.88673705784406, Y: 145.6911355360719}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 119.90877782857362, Y: 142.69011417010475}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 121.7205646001176, Y: 137.9725095392452}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 117.02660854266361, Y: 129.7038865923218}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 95.53039935901188, Y: 111.82488963989985}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.00146627327814, Y: 105.08796540963792}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.33180539850362, Y: 123.75628728089062}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.53600800602896, Y: 126.9867250450579}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 137.6146477184416, Y: 124.41109687567388}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.6539379248489, Y: 114.71197579923606}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.82573178087796, Y: 85.6226896952053}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 86.06673359411869, Y: 130.44050964674835}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 114.30424672198936, Y: 137.24853899180263}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.78415298682266, Y: 135.76155186537417}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 128.4370331400469, Y: 130.83626423005006}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.81793871625356, Y: 120.37595356159008}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 112.10639203319728, Y: 95.33045884892681}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.49323426783418, Y: 95.05908517744862}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 128.70102082222166, Y: 119.19376569198872}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 132.80841664755707, Y: 126.77283659426749}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.84970657102377, Y: 127.53581018481371}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.3860716832876, Y: 121.83191324975331}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 105.50558933849673, Y: 100.62008706080948}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.69240194313716, Y: 114.5307175366394}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 114.65191354102839, Y: 125.24672151270721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.03898144677848, Y: 125.76552208275317}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 130.4340376495267, Y: 121.16418734043059}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.56088669456625, Y: 110.82539897138867}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.28670568334428, Y: 88.43745225327233}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 83.8277514120339, Y: 138.93083370753428}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.59239399980017, Y: 144.0411074755302}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 116.44898471788231, Y: 146.05546682642733}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 116.34896987113308, Y: 146.6424637159879}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.26861079817078, Y: 145.941422662984}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 83.20898387137919, Y: 142.56244074919752}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.89555477360024, Y: 145.068902858587}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 113.55690662695783, Y: 144.1072053579495}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.11507706265655, Y: 137.66374229988656}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 132.79547322189862, Y: 129.52152473716296}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 136.6616641233423, Y: 115.94660562925395}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.6153806631019, Y: 85.68807984234503}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 134.33271834067673, Y: 84.89859559808822}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 139.52290627403312, Y: 111.54966962519853}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.1000982117343, Y: 121.14179149445158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.6670957824232, Y: 123.58605646196415}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.79602912710473, Y: 119.66976215054652}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 105.02835689914588, Y: 101.05640854970244}, Radius: 0, Start: 0, Angle: 0},
}},
},
},
{
ends: [2]feat.Feature{b.Set[0], b.Set[1]},
bezier: &rings.Bezier{Segments: 5,
Radius: rings.LengthDist{Length: 2 * 70 / 3, Min: floatPtr(0.95), Max: floatPtr(1.05)},
Crest: &rings.FactorDist{Factor: 2, Min: floatPtr(0.7), Max: floatPtr(1.4)},
},
actions: []interface{}{
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 220.6937479573146, Y: 136.70086269651873}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 187.27574270379353, Y: 137.25961633395113}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.15903174864417, Y: 130.9097077221543}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 148.13498972152996, Y: 127.32746428700274}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.19498892990453, Y: 125.11993485232419}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 95.53039935901188, Y: 111.82488963989985}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 217.42031968199183, Y: 126.32076982820193}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 186.00019989187024, Y: 133.32053939223022}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.19552498423474, Y: 129.88602813395457}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.86972436475185, Y: 124.50089395100164}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 146.22968107268173, Y: 114.41065499972504}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.82573178087796, Y: 85.6226896952053}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 159.5939989492541, Y: 82.8603907326586}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.92941429324918, Y: 111.49485043162561}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 147.70416599618704, Y: 120.67802902176378}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 141.0425372642429, Y: 122.42734783244794}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.1086354461495, Y: 117.48750167624756}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 112.10639203319728, Y: 95.33045884892681}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.21436576390906, Y: 146.1827849382893}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 188.2180668286317, Y: 142.7267415391919}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 168.89416473245714, Y: 134.14002758002692}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.88163388545502, Y: 127.88879157549177}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 132.85124984954496, Y: 121.11172995462557}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 105.50558933849673, Y: 100.62008706080948}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 176.32705020754776, Y: 86.6800054815636}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.39233488090187, Y: 107.93519719859239}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 155.82445738512044, Y: 114.91667264848387}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 146.64756661804992, Y: 115.22658406817885}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 136.63048444192012, Y: 108.90650939232411}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.28670568334428, Y: 88.43745225327233}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 219.24142964767108, Y: 131.39119689359507}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 186.84454583290164, Y: 134.3999975821199}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 161.85475786820874, Y: 131.6380158146877}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 139.86707538111085, Y: 133.44368623016248}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 115.66269170344745, Y: 140.24558718419001}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 83.20898387137919, Y: 142.56244074919752}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 190.46661300037744, Y: 93.69067848308764}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 171.54730266177307, Y: 116.94666453897386}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 160.7093692836963, Y: 122.34880957245115}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.63976847345785, Y: 121.2515041480676}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.63785457384108, Y: 113.15153396205824}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.6153806631019, Y: 85.68807984234503}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0x0, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 185.07819022344938, Y: 90.54306720176712}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 167.85681139241447, Y: 113.63280001983611}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 154.46407158138777, Y: 120.55789476680084}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 142.3545736044188, Y: 122.1482951523736}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 127.62784877361577, Y: 118.91626906056871}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 105.02835689914588, Y: 101.05640854970244}, Radius: 0, Start: 0, Angle: 0},
}},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
var m [2][]feat.Feature
rand.Seed(2)
for j := range m {
m[j] = randomFeatures(marks/2, t.ends[j].Start(), t.ends[j].End(), true, plotter.DefaultLineStyle)
}
mp := make([]rings.Pair, marks/2)
for j := range mp {
m[0][j].(*fs).location = t.ends[0]
m[1][j].(*fs).location = t.ends[1]
mp[j] = fp{feats: [2]*fs{m[0][j].(*fs), m[1][j].(*fs)}, sty: plotter.DefaultLineStyle}
}
l, err := rings.NewLinks(mp, [2]rings.ArcOfer{b, b}, [2]vg.Length{70, 70})
c.Assert(err, check.Equals, nil)
l.Bezier = t.bezier
l.LineStyle = plotter.DefaultLineStyle
p.Add(l)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
s, err := rings.NewSpokes(append(m[0], m[1]...), b, 72, 78)
c.Assert(err, check.Equals, nil)
p.Add(b, s)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("links-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestRibbons(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
redSty := plotter.DefaultLineStyle
redSty.Width *= 2
redSty.Color = color.RGBA{R: 255, G: 0, B: 0, A: 255}
blueSty := plotter.DefaultLineStyle
blueSty.Width *= 2
blueSty.Color = color.RGBA{R: 0, G: 0, B: 255, A: 255}
for i, t := range []struct {
orient []feat.Orientation
pairs []rings.Pair
segments int
twist rings.Twist
actions []interface{}
}{
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.NotOriented},
pairs: []rings.Pair{
fp{
feats: [2]*fs{
{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/5,
orient: feat.Reverse,
location: b.Set[0],
style: redSty,
},
{
start: b.Set[1].Start(),
end: b.Set[1].End() - b.Set[1].Len()/5,
orient: feat.Reverse,
location: b.Set[1],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
fp{
feats: [2]*fs{
{
start: b.Set[2].Start(),
end: b.Set[2].Start() + b.Set[2].Len()/3,
orient: feat.Forward,
location: b.Set[2],
style: redSty,
},
{
start: b.Set[2].End() - b.Set[2].Len()/8,
end: b.Set[2].End(),
orient: feat.Reverse,
location: b.Set[2],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 136.92383050286517, Y: 84.25497861531197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
{Type: vg.LineComp, Pos: vg.Point{X: 134.46313551225836, Y: 193.39542462921173}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.18289877836887, Y: 179.33719016058748}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.46367310317905, Y: 172.48189130151792}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 192.3054584866889, Y: 172.82952805200304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.4096487325905134, Angle: -0.3782328060546156},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 120.30438330484755, Y: 214.65659470739064}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 134.46313551225836, Y: 193.39542462921173}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.18289877836887, Y: 179.33719016058748}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.46367310317905, Y: 172.48189130151792}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 192.3054584866889, Y: 172.82952805200304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.4096487325905134, Angle: -0.3782328060546156}},
}},
},
{
orient: []feat.Orientation{feat.Forward, feat.Reverse, feat.NotOriented},
pairs: []rings.Pair{
fp{
feats: [2]*fs{
{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/5,
orient: feat.Reverse,
location: b.Set[0],
style: redSty,
},
{
start: b.Set[1].Start(),
end: b.Set[1].End() - b.Set[1].Len()/5,
orient: feat.Reverse,
location: b.Set[1],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
fp{
feats: [2]*fs{
{
start: b.Set[2].Start(),
end: b.Set[2].Start() + b.Set[2].Len()/3,
orient: feat.Forward,
location: b.Set[2],
style: redSty,
},
{
start: b.Set[2].End() - b.Set[2].Len()/8,
end: b.Set[2].End(),
orient: feat.Reverse,
location: b.Set[2],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
{Type: vg.LineComp, Pos: vg.Point{X: 192.90504382281705, Y: 133.77306323362805}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.6307430157773, Y: 133.50989617220003}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 150.89956679501304, Y: 126.29338825313054}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.7115151605242, Y: 112.1235394764196}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 119.0665881123108, Y: 91.00034984206721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.214445033887625, Angle: -1.0942459830557514},
{Type: vg.LineComp, Pos: vg.Point{X: 110.50887014975963, Y: 153.3704101695125}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.50024010275996, Y: 152.6872771642238}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.49012826640032, Y: 151.94803894496397}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.47853464068075, Y: 151.15269551173304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 192.90504382281705, Y: 133.77306323362805}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.6307430157773, Y: 133.50989617220003}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 150.89956679501304, Y: 126.29338825313054}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.7115151605242, Y: 112.1235394764196}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 119.0665881123108, Y: 91.00034984206721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 82.51601840739936, Y: 153.99743796083007}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.50887014975963, Y: 153.3704101695125}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.50024010275996, Y: 152.6872771642238}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.49012826640032, Y: 151.94803894496397}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.47853464068075, Y: 151.15269551173304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 119.0665881123108, Y: 91.00034984206721}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.214445033887625, Angle: -1.0942459830557514},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
{Type: vg.LineComp, Pos: vg.Point{X: 134.46313551225836, Y: 193.39542462921173}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.18289877836887, Y: 179.33719016058748}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.46367310317905, Y: 172.48189130151792}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 192.3054584866889, Y: 172.82952805200304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.4096487325905134, Angle: -0.3782328060546156},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 120.30438330484755, Y: 214.65659470739064}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 134.46313551225836, Y: 193.39542462921173}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 151.18289877836887, Y: 179.33719016058748}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 170.46367310317905, Y: 172.48189130151792}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 192.3054584866889, Y: 172.82952805200304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.4096487325905134, Angle: -0.3782328060546156},
}},
},
},
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.Reverse},
pairs: []rings.Pair{
fp{
feats: [2]*fs{
{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/5,
orient: feat.Reverse,
location: b.Set[0],
style: redSty,
},
{
start: b.Set[1].Start(),
end: b.Set[1].End() - b.Set[1].Len()/5,
orient: feat.Reverse,
location: b.Set[1],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
fp{
feats: [2]*fs{
{
start: b.Set[2].Start(),
end: b.Set[2].Start() + b.Set[2].Len()/3,
orient: feat.Forward,
location: b.Set[2],
style: redSty,
},
{
start: b.Set[2].End() - b.Set[2].Len()/8,
end: b.Set[2].End(),
orient: feat.Reverse,
location: b.Set[2],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 136.92383050286517, Y: 84.25497861531197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.031415926535897754, Angle: 1.0086461940848572},
{Type: vg.LineComp, Pos: vg.Point{X: 172.67038374470474, Y: 192.38633670499263}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 155.23186577061887, Y: 179.23025328639585}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 135.61611389965154, Y: 173.40224680492543}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 113.82312813180272, Y: 174.90231726058138}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 89.85290846707245, Y: 183.73046465336367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 2.6791343917054604, Angle: 0.3782328060546156},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 187.93166782190912, Y: 212.87049706071576}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 172.67038374470474, Y: 192.38633670499263}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 155.23186577061887, Y: 179.23025328639585}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 135.61611389965154, Y: 173.40224680492543}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 113.82312813180272, Y: 174.90231726058138}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 89.85290846707245, Y: 183.73046465336367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.65742842744058, Y: 156.35679087549937}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.5838041339555, Y: 154.97177342359538}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 166.52726783582057, Y: 154.233761316289}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.4878195330358, Y: 154.14275455358018}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.031415926535897754, Angle: 1.0086461940848572},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.85290846707245, Y: 183.73046465336367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 2.6791343917054604, Angle: 0.3782328060546156},
}},
},
},
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.Forward},
pairs: []rings.Pair{
fp{
feats: [2]*fs{
{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/5,
orient: feat.Reverse,
location: b.Set[0],
style: redSty,
},
{
start: b.Set[1].Start(),
end: b.Set[1].End() - b.Set[1].Len()/5,
orient: feat.Reverse,
location: b.Set[1],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
fp{
feats: [2]*fs{
{
start: b.Set[2].Start(),
end: b.Set[2].Start() + b.Set[2].Len()/3,
orient: feat.Forward,
location: b.Set[2],
style: redSty,
},
{
start: b.Set[2].End() - b.Set[2].Len()/8,
end: b.Set[2].End(),
orient: feat.Forward,
location: b.Set[2],
style: blueSty,
},
},
sty: plotter.DefaultLineStyle,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 191.53092479391694, Y: 135.5344727962992}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.1342669001769, Y: 140.55553442288462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.53249553491207, Y: 142.1460743171709}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.72561069812248, Y: 140.306092479158}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 136.92383050286517, Y: 84.25497861531197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 145.32986989085776, Y: 108.7352361883809}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 158.08705245712767, Y: 127.57999179983727}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 175.19537820167486, Y: 140.7892454496811}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.65484712449938, Y: 148.36299713791232}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.2517693806436885, Angle: -0.3401785862023008},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.71361238980812, Y: 135.03558890884597}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.393747857626204, Angle: 1.0942459830557514},
}},
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
{Type: vg.LineComp, Pos: vg.Point{X: 134.6934236841265, Y: 192.36817073814876}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.1040514658413, Y: 175.22817459633566}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 172.53626664999203, Y: 163.23660628195134}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 195.99006923657868, Y: 156.39346579499576}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.031415926535897754, Angle: 0.3782328060546156},
{Type: vg.LineComp, Pos: vg.Point{X: 190.80320878314603, Y: 170.57881681058745}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 164.45467428900756, Y: 163.47904633585557}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 137.66265144648307, Y: 159.0807889878472}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.42714025557248, Y: 157.3840447665623}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0xff, A: 0xfe}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 120.30438330484755, Y: 214.65659470739064}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 134.6934236841265, Y: 192.36817073814876}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.1040514658413, Y: 175.22817459633566}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 172.53626664999203, Y: 163.23660628195134}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 195.99006923657868, Y: 156.39346579499576}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 216.70825492889844, Y: 180.38010041204285}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 190.80320878314603, Y: 170.57881681058745}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 164.45467428900756, Y: 163.47904633585557}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 137.66265144648307, Y: 159.0807889878472}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.42714025557248, Y: 157.3840447665623}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 82.74814071627586, Y: 158.38881367200094}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 3.057367197760076, Angle: -1.0086461940848572},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 154.69875313546896}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 0.031415926535897754, Angle: 0.3782328060546156},
}},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
for j, o := range t.orient {
b.Set[j].(*fs).orient = o
}
b.Base = rings.NewGappedArcs(b.Base, b.Set, 0.01)
r, err := rings.NewRibbons(t.pairs, [2]rings.ArcOfer{b, b}, [2]vg.Length{70, 70})
c.Assert(err, check.Equals, nil)
r.Bezier = &rings.Bezier{Segments: t.segments}
r.Twist = t.twist
r.LineStyle = plotter.DefaultLineStyle
r.Color = color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}
p.Add(r)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("ribbons-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestSail(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
redSty := plotter.DefaultLineStyle
redSty.Width *= 2
redSty.Color = color.RGBA{R: 255, G: 0, B: 0, A: 255}
blueSty := plotter.DefaultLineStyle
blueSty.Width *= 2
blueSty.Color = color.RGBA{R: 0, G: 0, B: 255, A: 255}
for i, t := range []struct {
orient []feat.Orientation
ends []feat.Feature
segments int
twist rings.Twist
actions []interface{}
}{
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.NotOriented},
ends: []feat.Feature{
&fs{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/8,
orient: feat.NotOriented,
location: b.Set[0],
style: redSty,
},
&fs{
start: b.Set[1].Start() + b.Set[0].Len()/8,
end: b.Set[1].Start() + b.Set[0].Len()/4,
orient: feat.NotOriented,
location: b.Set[1],
style: redSty,
},
&fs{
start: b.Set[2].Start() + 2*b.Set[2].Len()/5,
end: b.Set[2].End() - 2*b.Set[2].Len()/5,
orient: feat.Reverse,
location: b.Set[2],
style: blueSty,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 1.8469917648582488, Angle: -0.605200405420522},
{Type: vg.LineComp, Pos: vg.Point{X: 165.28125595455933, Y: 192.66745599072038}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.86738894959836, Y: 167.42972044885494}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.87550574358931, Y: 143.03229497168846}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.30560633653224, Y: 119.47517955922092}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.062761091201875, Angle: 0.21261637474004047},
{Type: vg.LineComp, Pos: vg.Point{X: 136.25616936425217, Y: 111.23375127848458}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.70267184177737, Y: 126.9621675160278}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 172.21314634858985, Y: 136.26381125713445}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.7875928846896, Y: 139.13868250180454}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
{Type: vg.LineComp, Pos: vg.Point{X: 196.51434156975887, Y: 153.78667769222616}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.6333559827128, Y: 162.48396766693642}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 156.822502464463, Y: 176.39311678866179}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.08178101500948, Y: 195.51412505740225}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 175.11710675847226, Y: 218.74550159728483}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.28125595455933, Y: 192.66745599072038}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.86738894959836, Y: 167.42972044885494}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.87550574358931, Y: 143.03229497168846}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.30560633653224, Y: 119.47517955922092}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 122.87363891601422, Y: 89.07856254450478}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 136.25616936425217, Y: 111.23375127848458}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.70267184177737, Y: 126.9621675160278}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 172.21314634858985, Y: 136.26381125713445}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.7875928846896, Y: 139.13868250180454}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.51434156975887, Y: 153.78667769222616}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.6333559827128, Y: 162.48396766693642}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 156.822502464463, Y: 176.39311678866179}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.08178101500948, Y: 195.51412505740225}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 1.8469917648582488, Angle: -0.605200405420522},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.062761091201875, Angle: 0.21261637474004047},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
}},
},
},
{
orient: []feat.Orientation{feat.Reverse, feat.NotOriented, feat.NotOriented},
ends: []feat.Feature{
&fs{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/8,
orient: feat.NotOriented,
location: b.Set[0],
style: redSty,
},
&fs{
start: b.Set[1].Start() + b.Set[0].Len()/8,
end: b.Set[1].Start() + b.Set[0].Len()/4,
orient: feat.NotOriented,
location: b.Set[1],
style: redSty,
},
&fs{
start: b.Set[2].Start() + 2*b.Set[2].Len()/5,
end: b.Set[2].End() - 2*b.Set[2].Len()/5,
orient: feat.Reverse,
location: b.Set[2],
style: blueSty,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 1.8469917648582488, Angle: -0.605200405420522},
{Type: vg.LineComp, Pos: vg.Point{X: 165.28125595455933, Y: 192.66745599072038}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.86738894959836, Y: 167.42972044885494}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.87550574358931, Y: 143.03229497168846}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.30560633653224, Y: 119.47517955922092}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.062761091201875, Angle: 0.21261637474004047},
{Type: vg.LineComp, Pos: vg.Point{X: 133.08871718078365, Y: 109.14674438051988}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.03286310790335, Y: 118.61413992416902}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.70607669737328, Y: 117.48074917545219}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 144.10835794919348, Y: 105.74657213436939}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 141.23970686336392, Y: 83.41160880092065}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.550825693753751, Angle: 0.21261637474004225},
{Type: vg.LineComp, Pos: vg.Point{X: 154.0226325850737, Y: 110.4522507778316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 150.7317696788274, Y: 138.1083525275895}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 146.1995752182917, Y: 165.55951006006313}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.42604920346668, Y: 192.8057233752526}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 175.11710675847226, Y: 218.74550159728483}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 165.28125595455933, Y: 192.66745599072038}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.86738894959836, Y: 167.42972044885494}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.87550574358931, Y: 143.03229497168846}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 126.30560633653224, Y: 119.47517955922092}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 122.87363891601422, Y: 89.07856254450478}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.08871718078365, Y: 109.14674438051988}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.03286310790335, Y: 118.61413992416902}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.70607669737328, Y: 117.48074917545219}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 144.10835794919348, Y: 105.74657213436939}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 141.23970686336392, Y: 83.41160880092065}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 156.0721639370306, Y: 82.59120481078952}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 154.0226325850737, Y: 110.4522507778316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 150.7317696788274, Y: 138.1083525275895}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 146.1995752182917, Y: 165.55951006006313}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 140.42604920346668, Y: 192.8057233752526}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41119163435226, Y: 219.8469924731578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 1.8469917648582488, Angle: -0.605200405420522},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 110.15769072842713, Y: 96.7583742114524}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.062761091201875, Angle: 0.21261637474004047},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 141.23970686336392, Y: 83.41160880092065}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.550825693753751, Angle: 0.21261637474004225},
}},
},
},
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.NotOriented},
ends: []feat.Feature{
&fs{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/8,
orient: feat.NotOriented,
location: b.Set[0],
style: redSty,
},
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/8,
orient: feat.NotOriented,
location: b.Set[1],
style: redSty,
},
&fs{
start: b.Set[0].Start() + 2*b.Set[0].Len()/5,
end: b.Set[0].End() - 2*b.Set[0].Len()/5,
orient: feat.NotOriented,
location: b.Set[0],
style: blueSty,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.317022664193097, Angle: 0.17097117648885884},
{Type: vg.LineComp, Pos: vg.Point{X: 143.91961502120444, Y: 106.39163397144404}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.44603297851438, Y: 118.20558293208987}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 162.503084374795, Y: 119.69682549724942}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.0907692100463, Y: 110.8653616669227}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.231195555127963, Angle: 0.34020396414151577},
{Type: vg.LineComp, Pos: vg.Point{X: 189.1394495052649, Y: 122.56069345242653}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 182.44951692109703, Y: 133.33357248887017}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 185.43396638384303, Y: 139.09554680061996}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 198.09279789350288, Y: 139.8466163876759}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
{Type: vg.LineComp, Pos: vg.Point{X: 196.19948434399225, Y: 148.5088024785874}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 173.3739270796463, Y: 141.37246681238142}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.98878743256344, Y: 128.89223986591304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.04406540274357, Y: 111.06812163918224}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 136.92383050286517, Y: 84.25497861531197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.91961502120444, Y: 106.39163397144404}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.44603297851438, Y: 118.20558293208987}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 162.503084374795, Y: 119.69682549724942}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.0907692100463, Y: 110.8653616669227}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 205.50376413634663, Y: 106.77690969128909}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 189.1394495052649, Y: 122.56069345242653}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 182.44951692109703, Y: 133.33357248887017}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 185.43396638384303, Y: 139.09554680061996}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 198.09279789350288, Y: 139.8466163876759}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.19948434399225, Y: 148.5088024785874}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 173.3739270796463, Y: 141.37246681238142}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.98878743256344, Y: 128.89223986591304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.04406540274357, Y: 111.06812163918224}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.317022664193097, Angle: 0.17097117648885884},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.231195555127963, Angle: 0.34020396414151577},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
}},
},
},
{
orient: []feat.Orientation{feat.NotOriented, feat.NotOriented, feat.NotOriented},
ends: []feat.Feature{
&fs{
start: b.Set[0].Start(),
end: b.Set[0].Start() + b.Set[0].Len()/8,
orient: feat.NotOriented,
location: b.Set[0],
style: redSty,
},
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/8,
orient: feat.NotOriented,
location: b.Set[1],
style: redSty,
},
&fs{
start: b.Set[0].Start() + 2*b.Set[0].Len()/5,
end: b.Set[0].End() - 2*b.Set[0].Len()/5,
orient: feat.NotOriented,
location: b.Set[0],
style: blueSty,
},
&fs{
start: b.Set[0].Start() + b.Set[0].Len()/5,
end: b.Set[0].Start() + 2*b.Set[0].Len()/7,
orient: feat.Reverse,
location: b.Set[0],
style: blueSty,
},
},
segments: 5,
twist: rings.Individual | rings.Flat,
actions: []interface{}{
setColor{col: color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.317022664193097, Angle: 0.17097117648885884},
{Type: vg.LineComp, Pos: vg.Point{X: 143.91961502120444, Y: 106.39163397144404}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.44603297851438, Y: 118.20558293208987}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 162.503084374795, Y: 119.69682549724942}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.0907692100463, Y: 110.8653616669227}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.231195555127963, Angle: 0.34020396414151577},
{Type: vg.LineComp, Pos: vg.Point{X: 189.03130781590716, Y: 122.2205377799216}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 182.01695016366594, Y: 131.9729497988504}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 184.46069117962304, Y: 136.03414574807553}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.3625308637785, Y: 134.40412562759693}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.911590794441388, Angle: -0.14579626078796082},
{Type: vg.LineComp, Pos: vg.Point{X: 194.15328928066876, Y: 129.66475902163717}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 185.2698017947617, Y: 137.32960937155113}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 186.687426327694, Y: 140.87156319292262}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 198.40616287946563, Y: 140.2906204857516}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
{Type: vg.LineComp, Pos: vg.Point{X: 196.19948434399225, Y: 148.5088024785874}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 173.3739270796463, Y: 141.37246681238142}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.98878743256344, Y: 128.89223986591304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.04406540274357, Y: 111.06812163918224}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 136.92383050286517, Y: 84.25497861531197}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 143.91961502120444, Y: 106.39163397144404}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 152.44603297851438, Y: 118.20558293208987}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 162.503084374795, Y: 119.69682549724942}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 174.0907692100463, Y: 110.8653616669227}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 205.50376413634663, Y: 106.77690969128909}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 189.03130781590716, Y: 122.2205377799216}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 182.01695016366594, Y: 131.9729497988504}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 184.46069117962304, Y: 136.03414574807553}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.3625308637785, Y: 134.40412562759693}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 213.33788878541515, Y: 117.87701214318068}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 194.15328928066876, Y: 129.66475902163717}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 185.2698017947617, Y: 137.32960937155113}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 186.687426327694, Y: 140.87156319292262}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 198.40616287946563, Y: 140.2906204857516}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.MoveComp, Pos: vg.Point{X: 222.4654592256012, Y: 150.301246864531}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 196.19948434399225, Y: 148.5088024785874}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 173.3739270796463, Y: 141.37246681238142}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 153.98878743256344, Y: 128.89223986591304}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.04406540274357, Y: 111.06812163918224}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.53976099018678, Y: 87.90011213218907}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 4.317022664193097, Angle: 0.17097117648885884},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 187.20908748426825, Y: 91.71119144110972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.231195555127963, Angle: 0.34020396414151577},
}},
setColor{col: color.RGBA{R: 0x0, G: 0x0, B: 0xff, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 217.7224692161322, Y: 127.08288943741465}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 5.911590794441388, Angle: -0.14579626078796082},
}},
setColor{col: color.RGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 2},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 220.4260114500766, Y: 135.58678125003806}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 70, Start: 6.039153005903646, Angle: 0.21261637474004225},
}},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
for j, o := range t.orient {
b.Set[j].(*fs).orient = o
}
b.Base = rings.NewGappedArcs(b.Base, b.Set, 0.01)
r, err := rings.NewSail(t.ends, b, 70)
c.Assert(err, check.Equals, nil)
r.Bezier = &rings.Bezier{Segments: t.segments}
r.Twist = t.twist
r.LineStyle = plotter.DefaultLineStyle
r.Color = color.RGBA{R: 0xc4, G: 0x18, B: 0x80, A: 0xff}
p.Add(r)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("sail-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
// makeScorers returns n Scorers each with m scores.
func makeScorers(f *fs, n, m int, fn func(i, j int) float64) []rings.Scorer {
s := make([]rings.Scorer, n)
for i := 0; i < n; i++ {
cs := &fs{
start: f.Start() + i*(f.Len()/n),
end: f.Start() + (i+1)*(f.Len()/n),
name: fmt.Sprintf("%s#%d", f.Name(), i),
location: f,
scores: make([]float64, m),
}
for j := range cs.scores {
cs.scores[j] = fn(i, j)
}
s[i] = cs
}
return s
}
func (s *S) TestScores(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
orient feat.Orientation
scores []rings.Scorer
renderer rings.ScoreRenderer
actions []interface{}
}{
{
scores: makeScorers(b.Set[1].(*fs), 10, 5, func(i, j int) float64 { return float64(i * j) }),
renderer: &rings.Heat{Palette: palette.Radial(10, palette.Cyan, palette.Magenta, 1).Colors()},
actions: []interface{}{
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 143.59933171592297, Y: 113.50284492303541}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 142.0417147662095, Y: 106.67834278456661}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 140.48409781649605, Y: 99.8538406460978}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.92648086678255, Y: 93.02933850762899}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 137.36886391706906, Y: 86.20483636916019}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 135.89167750271054, Y: 108.53224336145828}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41809755630572, Y: 101.98385407486697}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 130.9445176099009, Y: 95.43546478827565}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.4709376634961, Y: 88.88707550168434}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.39519320703477, Y: 117.35734276689553}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 130.05185201826586, Y: 111.20737775110226}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 126.70851082949693, Y: 105.05741273530897}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 123.36516964072803, Y: 98.90744771951569}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.0218284519591, Y: 92.75748270372242}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.7819703078834, Y: 120.29045067803841}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.631315111763, Y: 114.65377954669515}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.4806599156426, Y: 109.01710841535187}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.33000471952221, Y: 103.3804372840086}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.1793495234018, Y: 97.74376615266532}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.61175495435593, Y: 123.82517152145267}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 119.73131207136822, Y: 118.80707653770689}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 114.8508691883805, Y: 113.78898155396111}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.97042630539279, Y: 108.77088657021532}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.08998342240508, Y: 103.75279158646954}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.96243881336021, Y: 127.89548345528912}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 115.44336560569823, Y: 123.58969305996473}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.92429239803627, Y: 119.28390266464032}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.40521919037431, Y: 114.97811226931591}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.88614598271235, Y: 110.6723218739915}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.90218414828041, Y: 132.425360817925}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.8475663742295, Y: 128.91229896106185}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.79294860017856, Y: 125.39923710419873}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 99.73833082612765, Y: 121.88617524733561}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.68371305207671, Y: 118.37311339047248}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 115.48815067793637, Y: 137.3301941422819}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.01107704657524, Y: 134.67547811718123}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 102.5340034152141, Y: 132.02076209208056}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 96.05692978385296, Y: 129.3660460669799}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.57985615249183, Y: 126.71133004187924}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 113.76542794208467, Y: 142.51837049925388}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 106.9868778319495, Y: 140.7715853366233}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.2083277218143, Y: 139.02480017399276}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.42977761167913, Y: 137.27801501136219}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x99, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 86.65122750154394, Y: 135.5312298487316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.76619311483745, Y: 147.89298465244477}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.812776909934, Y: 147.0867569666226}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.85936070503055, Y: 146.28052928080044}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 91.9059445001271, Y: 145.47430159497827}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x7f, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.95252829522367, Y: 144.6680739091561}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
},
},
{
scores: makeScorers(b.Set[1].(*fs), 10, 5, func(_, _ int) float64 { return rand.NormFloat64() }),
renderer: &rings.Heat{Palette: palette.Radial(10, palette.Cyan, palette.Magenta, 1).Colors()},
actions: []interface{}{
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 143.59933171592297, Y: 113.50284492303541}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 142.0417147662095, Y: 106.67834278456661}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 140.48409781649605, Y: 99.8538406460978}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.92648086678255, Y: 93.02933850762899}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 137.36886391706906, Y: 86.20483636916019}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.487993840681956, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.351219437284791, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x99, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 135.89167750271054, Y: 108.53224336145828}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.41809755630572, Y: 101.98385407486697}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x99, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 130.9445176099009, Y: 95.43546478827565}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.4709376634961, Y: 88.88707550168434}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.351219437284791, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.214445033887626, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.39519320703477, Y: 117.35734276689553}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 130.05185201826586, Y: 111.20737775110226}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 126.70851082949693, Y: 105.05741273530897}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 123.36516964072803, Y: 98.90744771951569}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.0218284519591, Y: 92.75748270372242}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.214445033887626, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.07767063049046, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 128.7819703078834, Y: 120.29045067803841}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.631315111763, Y: 114.65377954669515}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x7f, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.4806599156426, Y: 109.01710841535187}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.33000471952221, Y: 103.3804372840086}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.1793495234018, Y: 97.74376615266532}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 4.07767063049046, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.940896227093295, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.61175495435593, Y: 123.82517152145267}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 119.73131207136822, Y: 118.80707653770689}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 114.8508691883805, Y: 113.78898155396111}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.97042630539279, Y: 108.77088657021532}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.08998342240508, Y: 103.75279158646954}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.940896227093295, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.8041218236961294, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 120.96243881336021, Y: 127.89548345528912}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 115.44336560569823, Y: 123.58969305996473}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.92429239803627, Y: 119.28390266464032}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.40521919037431, Y: 114.97811226931591}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.88614598271235, Y: 110.6723218739915}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.8041218236961294, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.667347420298964, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.90218414828041, Y: 132.425360817925}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.8475663742295, Y: 128.91229896106185}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.79294860017856, Y: 125.39923710419873}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 99.73833082612765, Y: 121.88617524733561}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.68371305207671, Y: 118.37311339047248}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.667347420298964, Angle: -0.1367744033971653},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.5305730169017986, Angle: 0.1367744033971653},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 115.48815067793637, Y: 137.3301941422819}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 109.01107704657524, Y: 134.67547811718123}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x7f, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 102.5340034152141, Y: 132.02076209208056}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 96.05692978385296, Y: 129.3660460669799}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.57985615249183, Y: 126.71133004187924}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.5305730169017986, Angle: -0.1367744033971655},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.393798613504633, Angle: 0.1367744033971655},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 113.76542794208467, Y: 142.51837049925388}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 106.9868778319495, Y: 140.7715853366233}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.2083277218143, Y: 139.02480017399276}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.42977761167913, Y: 137.27801501136219}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 86.65122750154394, Y: 135.5312298487316}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.393798613504633, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.257024210107468, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.76619311483745, Y: 147.89298465244477}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.812776909934, Y: 147.0867569666226}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.85936070503055, Y: 146.28052928080044}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 91.9059445001271, Y: 145.47430159497827}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}},
fill{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.95252829522367, Y: 144.6680739091561}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68, Start: 3.257024210107468, Angle: -0.1367744033971654},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.1202498067103024, Angle: 0.1367744033971654},
{Type: vg.CloseComp, Pos: vg.Point{X: 0, Y: 0}, Radius: 0, Start: 0, Angle: 0},
}},
},
},
{
scores: makeScorers(b.Set[1].(*fs), 10, 1, func(v, _ int) float64 { return float64(v) }),
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.5170812433199, Y: 154.10059199332972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 81.86212109304435, Y: 144.30975049323513}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 71.11111111111111, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 87.4043997360034, Y: 135.7253170890239}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 67.22222222222223, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.89790524006592, Y: 128.4811407252797}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.33333333333333, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.0838014425834, Y: 122.66685565997186}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.44444444444444, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 108.6978316852225, Y: 118.32706035456823}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 55.55555555555556, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.47768348270975, Y: 115.46167988187636}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 51.666666666666664, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.17013120108297, Y: 114.02748275432367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47.77777777777778, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 131.53778143549647, Y: 113.94069553589927}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 43.888888888888886, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: 0.1367744033971654}},
}},
},
{
scores: makeScorers(b.Set[1].(*fs), 10, 1, func(v, _ int) float64 { return float64(v) }),
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.5170812433199, Y: 154.10059199332972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.99911209032022, Y: 143.86184622333394}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 81.86212109304435, Y: 144.30975049323513}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 71.11111111111111, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 83.63853856370608, Y: 134.75488088756248}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 87.4043997360034, Y: 135.7253170890239}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 67.22222222222223, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.29953100042084, Y: 127.00629848911265}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 93.89790524006592, Y: 128.4811407252797}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.33333333333333, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 97.720124901444, Y: 120.71515462838124}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 101.0838014425834, Y: 122.66685565997186}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.44444444444444, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.63167990318809, Y: 115.934954579388}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.6978316852225, Y: 118.32706035456823}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 55.55555555555556, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 113.76632632549435, Y: 112.67384933535092}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 116.47768348270975, Y: 115.46167988187636}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 51.666666666666664, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 121.86421164768274, Y: 110.89599879246629}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 124.17013120108297, Y: 114.02748275432367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47.77777777777778, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 129.6803696639582, Y: 110.524048304903}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.53778143549647, Y: 113.94069553589927}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 43.888888888888886, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 136.99104636777935, Y: 111.44263859994332}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
},
},
{
orient: feat.Forward,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 95.01315797750661, Y: 153.73003832496755}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.1201990508318733, Angle: 0.6838973949250415},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 107.16385821666168, Y: 117.13215799343922}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 93.36590202173261, Y: 106.36803216535552}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.8040964457569153, Angle: 0.22797002796488292},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.32171772278139, Y: 94.19725837174482}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 127.33824945215007, Y: 121.40520446493056}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.032066473721798, Angle: 0.4559273669601586},
}},
},
},
{
orient: feat.Forward,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3 + 1,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 95.01315797750661, Y: 153.73003832496755}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.1201990508318733, Angle: 0.6838973949250415},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 107.16385821666168, Y: 117.13215799343922}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 93.36590202173261, Y: 106.36803216535552}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.8040964457569153, Angle: 0.2279573389952756},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 127.33824945215007, Y: 121.40520446493056}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.032066473721798, Angle: 0.4559273669601586},
}},
},
},
{
orient: feat.Forward,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2 + 1,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 95.01315797750661, Y: 153.73003832496755}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.1201990508318733, Angle: 0.6838847059554342},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.36590202173261, Y: 106.36803216535552}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.8040964457569153, Angle: 0.22797002796488292},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.32171772278139, Y: 94.19725837174482}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 127.33824945215007, Y: 121.40520446493056}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.032066473721798, Angle: 0.4559273669601586},
}},
},
},
{
orient: feat.Reverse,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.50915337565678, Y: 153.35567883476003}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.1201990508318733, Angle: 0.4559273669601586},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.21734318635691, Y: 135.66049838791542}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.47001847441922, Y: 120.92593447734143}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.576126417792032, Angle: 0.22797002796488292},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.36590202173261, Y: 106.36803216535554}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 107.16385821666167, Y: 117.13215799343925}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.804096445756915, Angle: 0.6838973949250415},
}},
},
},
{
orient: feat.Reverse,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3 + 1,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.50915337565678, Y: 153.35567883476003}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.1201990508318733, Angle: 0.4559273669601586},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 84.47041912225374, Y: 120.92507124951537}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.576139106761639, Angle: 0.2279573389952756},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.36590202173261, Y: 106.36803216535554}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 107.16385821666167, Y: 117.13215799343925}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.804096445756915, Angle: 0.6838973949250415}},
}},
},
{
orient: feat.Reverse,
scores: []rings.Scorer{
&fs{
start: b.Set[1].Start(),
end: b.Set[1].Start() + b.Set[1].Len()/3,
name: fmt.Sprintf("%s#0", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{1},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/3,
end: b.Set[1].Start() + b.Set[1].Len()/2,
name: fmt.Sprintf("%s#1", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{3},
},
&fs{
start: b.Set[1].Start() + b.Set[1].Len()/2 + 1,
end: b.Set[1].End(),
name: fmt.Sprintf("%s#2", b.Set[1].Name()),
location: b.Set[1],
scores: []float64{2},
},
},
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Join: true,
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.50915337565678, Y: 153.35567883476003}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.1201990508318733, Angle: 0.4559273669601586},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.21734318635691, Y: 135.66049838791542}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 84.47001847441922, Y: 120.92593447734143}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.576126417792032, Angle: 0.22797002796488292},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 107.16430700178374, Y: 117.13158272736135}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.5, Start: 3.8041091347265223, Angle: 0.6838847059554342},
}},
},
},
{
scores: makeScorers(b.Set[1].(*fs), 10, 2, func(_, _ int) float64 { return rand.NormFloat64() }),
renderer: &rings.Trace{
LineStyles: func() []draw.LineStyle {
sty := []draw.LineStyle{plotter.DefaultLineStyle, plotter.DefaultLineStyle}
sty[0].Color = color.NRGBA{R: 0xff, A: 0xff}
sty[1].Color = color.RGBA{G: 0xff, A: 0x80}
return sty
}(),
},
actions: []interface{}{
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 106.42203131113078, Y: 153.48358438128594}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 46.088465332743745, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.66325238128137, Y: 153.60651178394392}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 51.84855612275754, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.00316042721153, Y: 146.18125543493176}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54.861936315635305, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 83.47726274439339, Y: 144.4970213076765}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 69.48514896153198, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 79.87267739140876, Y: 133.78444468610104}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.00010911484128, Y: 138.9711436888544}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54.215020944763964, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 102.13189097188692, Y: 131.85595088134733}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 54.43457698082379, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 98.13649424314028, Y: 130.21838362086683}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 58.752541958990804, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 106.16550357279438, Y: 125.61540412129611}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 53.569273419787514, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 103.77523046391377, Y: 124.2284995139924}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 56.3327693804862, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 95.9460872748634, Y: 108.37858956249192}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 71.72896139996323, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 110.57729514584946, Y: 119.79335286648781}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 53.171777749143374, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 118.3748140107319, Y: 117.4123186690577}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 48.94561982428966, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 107.90197344763634, Y: 106.64409333474813}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.96677378497078, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 123.44289448732908, Y: 113.03988103932193}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 49.004248480773136, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.6123529213532, Y: 115.98604812569974}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 45.34549863993757, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 119.5588498864459, Y: 91.9058490174767}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68.96934466918282, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 125.64884009622823, Y: 103.10818363486462}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 56.21864736922418, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 129.29604494210653, Y: 91.07140905087653}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 65.66502353858921, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
},
},
{
scores: makeScorers(b.Set[1].(*fs), 10, 2, func(_, _ int) float64 { return rand.NormFloat64() }),
renderer: &rings.Trace{
LineStyles: func() []draw.LineStyle {
sty := []draw.LineStyle{plotter.DefaultLineStyle, plotter.DefaultLineStyle}
sty[0].Color = color.NRGBA{R: 0xff, A: 0xff}
sty[1].Color = color.RGBA{G: 0xff, A: 0x80}
return sty
}(),
Join: true,
},
actions: []interface{}{
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.53810547581148, Y: 153.82264406229348}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 61.97600955484456, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.58451940234829, Y: 153.58684633690493}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 50.927079235411604, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.93643012087043, Y: 145.36188932001502}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 110.07770693050352, Y: 147.58126276914487}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 42.70649745905707, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.91183171086959, Y: 146.63445410890742}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 89.00466214778763, Y: 145.13790663631121}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.92071923611516, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.1445524207744, Y: 141.84298912722844}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 87.82359451519339, Y: 135.83334066466236}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 66.78933267996709, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.60145736887307, Y: 136.5491765790971}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 93.54274517016367, Y: 137.3071259645621}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 60.88334188041047, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 90.70008206319696, Y: 127.17046974695882}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.55396890509792, Y: 134.4881261774861}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47.494012755212246, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 96.16487310246404, Y: 129.4102880926274}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 115.48815067793637, Y: 137.3301941422819}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.42027231589864, Y: 128.66437076575613}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 107.45743046568425, Y: 126.36501693892414}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 52.075622030431774, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.90218414828041, Y: 132.425360817925}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 100.85844725334994, Y: 122.53609873426245}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.70498596556162, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 111.44154709707327, Y: 120.46761240440328}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 98.37240845370792, Y: 110.27152158835042}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 68.65158815035078, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 105.42625879909076, Y: 115.77469212521521}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 112.51850005161984, Y: 121.30781392256131}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 50.70969148409288, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.63569217225957, Y: 103.28568712522048}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 111.68001463366127, Y: 110.52869356028557}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 58.54794419588548, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.14489244256518, Y: 116.14770736233962}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 112.45431574879328, Y: 111.32483371291328}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 57.43736715690048, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 117.78395302874007, Y: 105.35492759307931}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.02869432728139, Y: 92.10709502132204}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 118.44247050839081, Y: 106.24920724090495}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 117.12965586238778, Y: 104.46637921345365}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.65140375782332, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.67848726319019, Y: 86.60751768792913}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 131.98108700494163, Y: 114.75614139962155}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 42.960733845502894, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.00928640694063, Y: 100.09227910663239}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 127.22778100678856, Y: 106.01259297082186}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 52.91279679942573, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.NRGBA{R: 0xff, G: 0x0, B: 0x0, A: 0xff}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 137.3190271824185, Y: 112.31091296314398}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 133.63616264540116, Y: 102.5611449343306}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 53.38289618417768, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
setColor{col: color.RGBA{R: 0x0, G: 0xff, B: 0x0, A: 0x80}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 133.8022809898211, Y: 103.0009154735796}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 137.13376676648508, Y: 111.82046699041888}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 43.48500350309722, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
b.Set[1].(*fs).orient = t.orient
b.Base = rings.NewGappedArcs(b.Base, b.Set, 0.01)
r, err := rings.NewScores(t.scores, b, 40, 75, t.renderer)
c.Assert(err, check.Equals, nil)
p.Add(r)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("scores-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
func (s *S) TestScoresAxis(c *check.C) {
rand.Seed(1)
b, err := rings.NewGappedBlocks(randomFeatures(3, 100000, 1000000, false, plotter.DefaultLineStyle),
rings.Arc{0, rings.Complete * rings.Clockwise},
80, 100, 0.01,
)
c.Assert(err, check.Equals, nil)
font, err := vg.MakeFont("Helvetica", 5)
c.Assert(err, check.Equals, nil)
for i, t := range []struct {
orient feat.Orientation
scores []rings.Scorer
renderer rings.ScoreRenderer
actions []interface{}
}{
{
scores: makeScorers(b.Set[1].(*fs), 10, 1, func(v, _ int) float64 { return float64(v) }),
renderer: &rings.Trace{
LineStyles: []draw.LineStyle{func() draw.LineStyle {
sty := plotter.DefaultLineStyle
sty.Color = color.Gray{0}
return sty
}()},
Axis: func() *rings.Axis {
a, err := b.ArcOf(b.Set[1], nil)
c.Assert(err, check.Equals, nil)
return &rings.Axis{
Angle: a.Theta + a.Phi - rings.Complete*0.01/2,
Grid: plotter.DefaultGridLineStyle,
LineStyle: plotter.DefaultLineStyle,
Label: rings.AxisLabel{
Text: "Test",
TextStyle: draw.TextStyle{Color: color.Gray16{0}, Font: font},
},
Tick: rings.TickConfig{
Marker: plot.DefaultTicks{},
LineStyle: plotter.DefaultLineStyle,
Length: -2,
Label: draw.TextStyle{Color: color.Gray16{0}, Font: font},
},
}
}(),
},
actions: []interface{}{
setColor{col: color.Gray{Y: 0x80}},
setWidth{w: 0.25},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 143.59933171592297, Y: 113.50284492303541}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 141.00330346640052, Y: 102.12867469225407}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 51.666666666666664, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.40727521687808, Y: 90.75450446147272}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.33333333333333, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 135.8112469673556, Y: 79.38033423069139}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 142.73398896608217, Y: 109.7114548461083}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 43.888888888888886, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 141.86864621624136, Y: 105.92006476918118}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47.77777777777778, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 140.1379607165597, Y: 98.33728461532695}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 55.55555555555556, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 139.27261796671888, Y: 94.54589453839984}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.44444444444444, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 137.54193246703724, Y: 86.9631143845456}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 67.22222222222223, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 136.6765897171964, Y: 83.17172430761849}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 71.11111111111111, Start: 4.487993840681956, Angle: -1.367794789850083},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.55576396611607, Y: 154.6113994575564}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 77.60455743646764, Y: 156.45887398291822}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 112.55576396611607, Y: 154.6113994575564}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 112.66133393899389, Y: 156.60861125925058}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.517986797501079}, fillString{font: "Helvetica", size: 5, x: 162.94672945174116, y: -106.58754296287375, str: "0"},
pop{},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 100.9053617895666, Y: 155.22722429934367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 101.01093176244441, Y: 157.22443610103787}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.517986797501079}, fillString{font: "Helvetica", size: 5, x: 162.94672945174116, y: -94.92087629620708, str: "3"},
pop{},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 89.25495961301712, Y: 155.84304914113093}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 89.36052958589494, Y: 157.84026094282513}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.517986797501079}, fillString{font: "Helvetica", size: 5, x: 162.94672945174116, y: -83.25420962954043, str: "6"},
pop{},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.60455743646764, Y: 156.45887398291822}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 77.71012740934546, Y: 158.4560857846124}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.517986797501079}, fillString{font: "Helvetica", size: 5, x: 162.94672945174116, y: -71.58754296287374, str: "9"},
pop{},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 108.67229657393293, Y: 154.8166744048188}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 108.72508156037182, Y: 155.8152803056659}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 104.78882918174975, Y: 155.02194935208124}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 104.84161416818867, Y: 156.02055525292835}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 97.02189439738343, Y: 155.43249924660608}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 97.07467938382234, Y: 156.4311051474532}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.13842700520027, Y: 155.63777419386852}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 93.1912119916392, Y: 156.6363800947156}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 85.37149222083396, Y: 156.04832408839337}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 85.42427720727287, Y: 157.04692998924045}, Radius: 0, Start: 0, Angle: 0},
}},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 81.4880248286508, Y: 156.25359903565578}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.LineComp, Pos: vg.Point{X: 81.5408098150897, Y: 157.2522049365029}, Radius: 0, Start: 0, Angle: 0},
}},
setColor{col: color.Gray16{Y: 0x0}},
push{},
rotate{angle: 1.517986797501079}, fillString{font: "Helvetica", size: 5, x: 155.75214937361616, y: -89.08754296287375, str: "Test"},
pop{},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 77.5170812433199, Y: 154.10059199332972}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 75, Start: 3.1202498067103024, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 81.86212109304435, Y: 144.30975049323513}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 71.11111111111111, Start: 3.257024210107468, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 87.4043997360034, Y: 135.7253170890239}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 67.22222222222223, Start: 3.393798613504633, Angle: 0.1367744033971655},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 93.89790524006592, Y: 128.4811407252797}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 63.33333333333333, Start: 3.5305730169017986, Angle: 0.1367744033971653},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 101.0838014425834, Y: 122.66685565997186}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 59.44444444444444, Start: 3.667347420298964, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 108.6978316852225, Y: 118.32706035456823}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 55.55555555555556, Start: 3.8041218236961294, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 116.47768348270975, Y: 115.46167988187636}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 51.666666666666664, Start: 3.940896227093295, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 124.17013120108297, Y: 114.02748275432367}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 47.77777777777778, Start: 4.07767063049046, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 131.53778143549647, Y: 113.94069553589927}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 43.888888888888886, Start: 4.214445033887626, Angle: 0.1367744033971654},
}},
setColor{col: color.Gray{Y: 0x0}},
setWidth{w: 1},
setLineDash{dashes: []vg.Length(nil), offsets: 0},
stroke{path: vg.Path{
{Type: vg.MoveComp, Pos: vg.Point{X: 138.36525744911535, Y: 115.0806326480496}, Radius: 0, Start: 0, Angle: 0},
{Type: vg.ArcComp, Pos: vg.Point{X: 152.5, Y: 152.5}, Radius: 40, Start: 4.351219437284791, Angle: 0.1367744033971654},
}},
},
},
} {
p, err := plot.New()
c.Assert(err, check.Equals, nil)
b.Set[1].(*fs).orient = t.orient
r, err := rings.NewScores(t.scores, b, 40, 75, t.renderer)
c.Assert(err, check.Equals, nil)
p.Add(r)
p.HideAxes()
tc := &canvas{dpi: defaultDPI}
p.Draw(draw.NewCanvas(tc, 300, 300))
base.append(t.actions...)
c.Check(tc.actions, check.DeepEquals, base.actions, check.Commentf("Test %d", i))
if ok := reflect.DeepEqual(tc.actions, base.actions); *pics && !ok || *allPics {
p.Add(b)
c.Assert(p.Save(vg.Length(300), vg.Length(300), fmt.Sprintf("axis-%d-%s.svg", i, failure(!ok))), check.Equals, nil)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment