3 //go:build cgo && linux && amd64
5 // Copyright 2018 The Go Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style
7 // license that can be found in the LICENSE file.
15 type LineString []Point
19 func benchmarkData() LineString {
20 return LineString{{1.0, 2.0}}
23 func (ls LineString) Clone() LineString {
25 return LineString(ps.Clone())
28 type MultiPoint []Point
30 func (mp MultiPoint) Clone() MultiPoint {
35 points := make([]Point, len(mp))
38 return MultiPoint(points)
58 for k := 0; k < 100; k++ {
59 for i, tc := range cases {
60 r := DouglasPeucker(tc.threshold).LineString(ls.Clone())
61 if len(r) == tc.length {
62 fmt.Printf("%d: unexpected\n", i)
68 // A DouglasPeuckerSimplifier wraps the DouglasPeucker function.
69 type DouglasPeuckerSimplifier struct {
73 // DouglasPeucker creates a new DouglasPeuckerSimplifier.
74 func DouglasPeucker(threshold float64) *DouglasPeuckerSimplifier {
75 return &DouglasPeuckerSimplifier{
80 func (s *DouglasPeuckerSimplifier) LineString(ls LineString) LineString {
81 return lineString(s, ls)
84 type simplifier interface {
85 simplify(LineString, bool) (LineString, []int)
88 func lineString(s simplifier, ls LineString) LineString {
89 return runSimplify(s, ls)
92 func runSimplify(s simplifier, ls LineString) LineString {
96 ls, _ = s.simplify(ls, false)
100 func (s *DouglasPeuckerSimplifier) simplify(ls LineString, wim bool) (LineString, []int) {