-
Notifications
You must be signed in to change notification settings - Fork 0
/
visual.go
79 lines (61 loc) · 2 KB
/
visual.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package visualisations
// this file should only be used for maths-y/svg-y utilities
// that all visualisations use. every other visualisation should
// be in its own file in this package
// TODO: maybe each vis should be in it's own sub package
import (
"fmt"
"math"
"strings"
)
// PointOnCircum calculates the coords (float64, float64) of a point
// on a circle with origin (`cx`, `cy`), radius `r`, at angle `a`
func PointOnCircum(cx, cy, r, a float64) (float64, float64) {
rad := a * math.Pi / 180 // deg to rad
return cx + r*math.Cos(rad), cy + r*math.Sin(rad)
}
// ScaleRange scales the value `n` which originally was part of the
// range `nMin` `nMax`, to a new range `rMin` `rMax`.
// eg. (n: 5, rMin: 0, rMax: 10, tMin: 0, tMax: 100) -> 50
func ScaleRange(n, rMin, rMax, tMin, tMax float64) float64 {
return ((n-rMin)/(rMax-rMin))*(tMax-tMin) + tMin
}
func ParseFill(colour string) string {
return fmt.Sprintf("fill:%s", colour)
}
func ParseFillOpacity(opacity float64) string {
return fmt.Sprintf("fill-opacity:%f", opacity)
}
func ParseStroke(stroke string) string {
return fmt.Sprintf("stroke:%s", stroke)
}
func ParseStrokeWidth(width float64) string {
return fmt.Sprintf("stroke-width:%.1f", width)
}
func ParseStrokeOpacity(opacity float64) string {
return fmt.Sprintf("stroke-opacity:%f", opacity)
}
type CapStyle string
const (
CapStyleButt = CapStyle("butt")
CapStyleRound = CapStyle("round")
CapStyleSquare = CapStyle("square")
)
func ParseStrokeLineCap(lineCap CapStyle) string {
return fmt.Sprintf("stroke-linecap:%s", string(lineCap))
}
func ParseTextAnchor(anchor string) string {
return fmt.Sprintf("text-anchor:%s", anchor)
}
func ParseDominantBaseline(anchor string) string {
return fmt.Sprintf("dominant-baseline:%s", anchor)
}
func ParseFontFamily(font string) string {
return fmt.Sprintf("font-family:%s", font)
}
func ParseFontSize(fontSize int) string {
return fmt.Sprintf("font-size:%vpx", fontSize)
}
func ParseStyles(styles ...string) string {
return strings.Join(styles, ";")
}