本文整理匯總了Golang中code/google/com/p/plotinum/vg.Length函數的典型用法代碼示例。如果您正苦於以下問題:Golang Length函數的具體用法?Golang Length怎麽用?Golang Length使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Length函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: arc
// Approximate a circular arc using multiple
// cubic Bézier curves, one for each π/2 segment.
//
// This is from:
// http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
func arc(p *pdf.Path, comp vg.PathComp) {
x0 := comp.X + comp.Radius*vg.Length(math.Cos(comp.Start))
y0 := comp.Y + comp.Radius*vg.Length(math.Sin(comp.Start))
p.Line(pdfPoint(x0, y0))
a1 := comp.Start
end := a1 + comp.Angle
sign := 1.0
if end < a1 {
sign = -1.0
}
left := math.Abs(comp.Angle)
// Square root of the machine epsilon for IEEE 64-bit floating
// point values. This is the equality threshold recommended
// in Numerical Recipes, if I recall correctly—it's small enough.
const epsilon = 1.4901161193847656e-08
for left > epsilon {
a2 := a1 + sign*math.Min(math.Pi/2, left)
partialArc(p, comp.X, comp.Y, comp.Radius, a1, a2)
left -= math.Abs(a2 - a1)
a1 = a2
}
}
示例2: crosshair
// crosshair draws a plus at the given point.
func crosshair(img draw.Image, x, y int, str string) {
c := vgimg.NewImage(img)
// drawPlots here because NewImage
// clears the canvas. Instead, the canvas
// should just be stored instead of being
// recreated at each redraw.
drawPlots(img)
c.SetColor(color.RGBA{R: 255, A: 255})
xc := vg.Inches(float64(x) / c.DPI())
yc := vg.Inches(float64(y) / c.DPI())
radius := vg.Points(5)
var p vg.Path
p.Move(xc-radius, yc)
p.Line(xc+radius, yc)
c.Stroke(p)
p = vg.Path{}
p.Move(xc, yc+radius)
p.Line(xc, yc-radius)
c.Stroke(p)
c.SetColor(color.Black)
c.FillString(font, vg.Length(0), vg.Length(0), str)
}
示例3: Height
// Height returns the height of the text when using
// the given font.
func (sty TextStyle) Height(txt string) vg.Length {
nl := textNLines(txt)
if nl == 0 {
return vg.Length(0)
}
e := sty.Font.Extents()
return e.Height*vg.Length(nl-1) + e.Ascent
}
示例4: GlyphBoxes
// GlyphBoxes returns a slice of GlyphBoxes,
// one for each of the labels, implementing the
// plot.GlyphBoxer interface.
func (l *Labels) GlyphBoxes(p *plot.Plot) []plot.GlyphBox {
bs := make([]plot.GlyphBox, len(l.Labels))
for i, label := range l.Labels {
bs[i].X = p.X.Norm(l.XYs[i].X)
bs[i].Y = p.Y.Norm(l.XYs[i].Y)
w := l.Width(label)
h := l.Height(label)
bs[i].Rect.Min.X = w*vg.Length(l.XAlign) + l.XOffset
bs[i].Rect.Min.Y = h*vg.Length(l.YAlign) + l.YOffset
bs[i].Rect.Size.X = w
bs[i].Rect.Size.Y = h
}
return bs
}
示例5: Plot
func (s *SparkLines) Plot(da plot.DrawArea, plt *plot.Plot) {
trX, trY := plt.Transforms(&da)
w := vg.Length(1)
da.SetLineWidth(w)
_, _, ymin, ymax := s.DataRange()
for _, d := range s.XYs {
perc := float64(d.Y-ymin) / float64(ymax-ymin)
c := BrightColorGradient.GetInterpolatedColorFor((perc*-1+1)*0.5 + 0.6)
da.SetColor(c)
// Transform the data x, y coordinate of this bubble
// to the corresponding drawing coordinate.
x := trX(d.X)
y := trY(d.Y * 0.9)
//rad := vg.Length(10)
var p vg.Path
p.Move(x-w, y)
p.Line(x-w, 0)
//p.Close()
da.Stroke(p)
//da.StrokeLine2(*sty, x, 0, x, y)
}
}
示例6: Plot
func (pt *Dots) Plot(da plot.DrawArea, plt *plot.Plot) {
trX, trY := plt.Transforms(&da)
da.SetColor(pt.Color)
for i := range pt.Y {
// Transform the data x, y coordinate of this bubble
// to the corresponding drawing coordinate.
x := trX(pt.X[i])
y := trY(pt.Y[i])
// Get the radius of this bubble. The radius
// is specified in drawing units (i.e., its size
// is given as the final size at which it will
// be drawn) so it does not need to be transformed.
rad := vg.Length(2)
// Fill a circle centered at x,y on the draw area.
var p vg.Path
p.Move(x+rad, y)
p.Arc(x, y, rad, 0, 2*math.Pi)
p.Close()
da.Fill(p)
}
}
示例7: draw
// draw draws the legend to the given DrawArea.
func (l *Legend) draw(da DrawArea) {
iconx := da.Min.X
textx := iconx + l.ThumbnailWidth + l.TextStyle.Width(" ")
xalign := 0.0
if !l.Left {
iconx = da.Max().X - l.ThumbnailWidth
textx = iconx - l.TextStyle.Width(" ")
xalign = -1
}
textx += l.XOffs
iconx += l.XOffs
enth := l.entryHeight()
y := da.Max().Y - enth
if !l.Top {
y = da.Min.Y + (enth+l.Padding)*(vg.Length(len(l.entries))-1)
}
y += l.YOffs
icon := &DrawArea{
Canvas: da.Canvas,
Rect: Rect{Min: Point{iconx, y}, Size: Point{l.ThumbnailWidth, enth}},
}
for _, e := range l.entries {
for _, t := range e.thumbs {
t.Thumbnail(icon)
}
yoffs := (enth - l.TextStyle.Height(e.text)) / 2
da.FillText(l.TextStyle, textx, icon.Min.Y+yoffs, xalign, 0, e.text)
icon.Min.Y -= enth + l.Padding
}
}
示例8: radius
// radius returns the radius of a bubble by linear interpolation.
func (bs *Bubbles) radius(z float64) vg.Length {
rng := bs.MaxRadius - bs.MinRadius
if bs.MaxZ == bs.MinZ {
return rng/2 + bs.MinRadius
}
d := (z - bs.MinZ) / (bs.MaxZ - bs.MinZ)
return vg.Length(d)*rng + bs.MinRadius
}
示例9: FillText
// FillText fills lines of text in the draw area.
// The text is offset by its width times xalign and
// its height times yalign. x and y give the bottom
// left corner of the text befor e it is offset.
func (da *DrawArea) FillText(sty TextStyle, x, y vg.Length, xalign, yalign float64, txt string) {
txt = strings.TrimRight(txt, "\n")
if len(txt) == 0 {
return
}
da.SetColor(sty.Color)
ht := sty.Height(txt)
y += ht*vg.Length(yalign) - sty.Font.Extents().Ascent
nl := textNLines(txt)
for i, line := range strings.Split(txt, "\n") {
xoffs := vg.Length(xalign) * sty.Font.Width(line)
n := vg.Length(nl - i)
da.FillString(sty.Font, x+xoffs, y+n*sty.Font.Size, line)
}
}
示例10: partialArc
// Approximate a circular arc of fewer than π/2
// radians with cubic Bézier curve.
func partialArc(p *pdf.Path, x, y, r vg.Length, a1, a2 float64) {
a := (a2 - a1) / 2
x4 := r * vg.Length(math.Cos(a))
y4 := r * vg.Length(math.Sin(a))
x1 := x4
y1 := -y4
const k = 0.5522847498 // some magic constant
f := k * vg.Length(math.Tan(a))
x2 := x1 + f*y4
y2 := y1 + f*x4
x3 := x2
y3 := -y2
// Rotate and translate points into position.
ar := a + a1
sinar := vg.Length(math.Sin(ar))
cosar := vg.Length(math.Cos(ar))
x2r := x2*cosar - y2*sinar + x
y2r := x2*sinar + y2*cosar + y
x3r := x3*cosar - y3*sinar + x
y3r := x3*sinar + y3*cosar + y
x4 = r*vg.Length(math.Cos(a2)) + x
y4 = r*vg.Length(math.Sin(a2)) + y
p.Curve(pdfPoint(x2r, y2r), pdfPoint(x3r, y3r), pdfPoint(x4, y4))
}
示例11: arc
// Approximate a circular arc using multiple
// cubic Bézier curves, one for each π/2 segment.
//
// This is from:
// http://hansmuller-flex.blogspot.com/2011/04/approximating-circular-arc-with-cubic.html
func arc(p *pdf.Path, comp vg.PathComp) {
x0 := comp.X + comp.Radius*vg.Length(math.Cos(comp.Start))
y0 := comp.Y + comp.Radius*vg.Length(math.Sin(comp.Start))
p.Line(pdfPoint(x0, y0))
a1 := comp.Start
end := a1 + comp.Angle
sign := 1.0
if end < a1 {
sign = -1.0
}
left := math.Abs(comp.Angle)
for left > 0 {
a2 := a1 + sign*math.Min(math.Pi/2, left)
partialArc(p, comp.X, comp.Y, comp.Radius, a1, a2)
left -= math.Abs(a2 - a1)
a1 = a2
}
}
示例12: padX
// padX returns a DrawArea that is padded horizontally
// so that glyphs will no be clipped.
func padX(p *Plot, da DrawArea) DrawArea {
glyphs := p.GlyphBoxes(p)
l := leftMost(&da, glyphs)
xAxis := horizontalAxis{p.X}
glyphs = append(glyphs, xAxis.GlyphBoxes(p)...)
r := rightMost(&da, glyphs)
minx := da.Min.X - l.Min.X
maxx := da.Max().X - (r.Min.X + r.Size.X)
lx := vg.Length(l.X)
rx := vg.Length(r.X)
n := (lx*maxx - rx*minx) / (lx - rx)
m := ((lx-1)*maxx - rx*minx + minx) / (lx - rx)
return DrawArea{
Canvas: vg.Canvas(da),
Rect: Rect{
Min: Point{X: n, Y: da.Min.Y},
Size: Point{X: m - n, Y: da.Size.Y},
},
}
}
示例13: padY
// padY returns a DrawArea that is padded vertically
// so that glyphs will no be clipped.
func padY(p *Plot, da DrawArea) DrawArea {
glyphs := p.GlyphBoxes(p)
b := bottomMost(&da, glyphs)
yAxis := verticalAxis{p.Y}
glyphs = append(glyphs, yAxis.GlyphBoxes(p)...)
t := topMost(&da, glyphs)
miny := da.Min.Y - b.Min.Y
maxy := da.Max().Y - (t.Min.Y + t.Size.Y)
by := vg.Length(b.Y)
ty := vg.Length(t.Y)
n := (by*maxy - ty*miny) / (by - ty)
m := ((by-1)*maxy - ty*miny + miny) / (by - ty)
return DrawArea{
Canvas: vg.Canvas(da),
Rect: Rect{
Min: Point{Y: n, X: da.Min.X},
Size: Point{Y: m - n, X: da.Size.X},
},
}
}
示例14: tickLabelHeight
// tickLabelHeight returns height of the tick mark labels.
func tickLabelHeight(sty TextStyle, ticks []Tick) vg.Length {
maxHeight := vg.Length(0)
for _, t := range ticks {
if t.IsMinor() {
continue
}
h := sty.Height(t.Label)
if h > maxHeight {
maxHeight = h
}
}
return maxHeight
}
示例15: Report
// Report builds up a plot of the response times of the requests
// in SVG format and writes it to out
func (r *TimingsPlotReporter) Report(out io.Writer) error {
timestamps := make([]time.Time, 0)
timings := make([]time.Duration, 0)
for e := r.responses.Front(); e != nil; e = e.Next() {
r := e.Value.(*result)
timestamps = append(timestamps, r.timestamp)
timings = append(timings, r.timing)
}
p, err := plot.New()
if err != nil {
return err
}
pts := make(plotter.XYs, len(timestamps))
for i := 0; i < len(pts); i++ {
pts[i].X = timestamps[i].Sub(timestamps[0]).Seconds()
pts[i].Y = timings[i].Seconds() * 1000
}
line, err := plotter.NewLine(pts)
if err != nil {
return err
}
line.Color = plotutil.Color(1)
p.Add(line)
p.X.Padding = vg.Length(3.0)
p.X.Label.Text = "Time elapsed"
p.Y.Padding = vg.Length(3.0)
p.Y.Label.Text = "Latency (ms)"
w, h := vg.Millimeters(float64(len(timestamps))), vg.Centimeters(12.0)
canvas := vgsvg.New(w, h)
p.Draw(plot.MakeDrawArea(canvas))
_, err = canvas.WriteTo(out)
return err
}