-
Notifications
You must be signed in to change notification settings - Fork 9
/
path.go
51 lines (47 loc) · 879 Bytes
/
path.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
package slicer
import "github.com/fogleman/fauxgl"
type Path []fauxgl.Vector
func joinPaths(paths []Path) []Path {
lookup := make(map[fauxgl.Vector]Path, len(paths))
for _, path := range paths {
lookup[path[0]] = path
}
var result []Path
for len(lookup) > 0 {
var v fauxgl.Vector
for v = range lookup {
break
}
var path Path
for {
path = append(path, v)
if p, ok := lookup[v]; ok {
delete(lookup, v)
v = p[len(p)-1]
} else {
break
}
}
result = append(result, path)
}
return result
}
func (p Path) Chop(step float64) Path {
var result Path
for i := 0; i < len(p)-1; i++ {
a := p[i]
b := p[i+1]
v := b.Sub(a)
l := v.Length()
if i == 0 {
result = append(result, a)
}
d := step
for d < l {
result = append(result, a.Add(v.MulScalar(d/l)))
d += step
}
result = append(result, b)
}
return result
}