annotate cmd/srsimplify/main.go @ 3771:b7530ed07561 simplify-sounding-results

Partition recursively. Does not produce good triangles.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 26 Jun 2019 12:06:28 +0200
parents 71164b817d6e
children 545304d3ff93
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3768
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2019 by via donau
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package main
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "bufio"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "flag"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "fmt"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "io"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "log"
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
22 "math"
3768
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 "os"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "strconv"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 "strings"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 "gemma.intevation.de/gemma/pkg/octree"
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 )
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 func loadXYZ(r io.Reader) (octree.MultiPointZ, error) {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 scanner := bufio.NewScanner(r)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 points := make(octree.MultiPointZ, 0, 2000000)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 var x, y, z float64
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 var err error
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 for scanner.Scan() {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 line := strings.TrimSpace(scanner.Text())
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 if len(line) == 0 || strings.HasPrefix(line, "#") {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 continue
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 parts := strings.SplitN(line, " ", 3)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 if len(parts) != 3 {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 continue
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 if x, err = strconv.ParseFloat(parts[0], 64); err != nil {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 return nil, err
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 if y, err = strconv.ParseFloat(parts[1], 64); err != nil {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 return nil, err
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 if z, err = strconv.ParseFloat(parts[2], 64); err != nil {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 return nil, err
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 points = append(points, octree.Vertex{X: x, Y: y, Z: z})
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 return points, nil
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 func storeXYZ(points octree.MultiPointZ, w io.Writer) error {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 out := bufio.NewWriter(w)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 for i := range points {
3771
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
67 fmt.Fprintf(out, "%.5f,%.5f,%.5f\n",
3768
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 points[i].X, points[i].Y, points[i].Z)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 return out.Flush()
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 func simplify(points octree.MultiPointZ, tolerance float64) octree.MultiPointZ {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
75 if len(points) < 2 {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
76 return points
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
77 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
78
3771
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
79 if tolerance < 0 {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
80 tolerance = -tolerance
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
81 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
82
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
83 min := octree.Vertex{X: math.MaxFloat64, Y: math.MaxFloat64, Z: math.MaxFloat64}
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
84 max := octree.Vertex{X: -math.MaxFloat64, Y: -math.MaxFloat64, Z: -math.MaxFloat64}
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
85
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
86 var maxIdx int
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
87
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
88 for i, v := range points {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
89 min.Minimize(v)
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
90
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
91 if v.X < min.X {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
92 min.X = v.X
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
93 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
94 if v.X > max.X {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
95 max.X = v.X
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
96 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
97 if v.Y < min.Y {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
98 min.Y = v.Y
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
99 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
100 if v.Y > max.Y {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
101 max.Y = v.Y
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
102 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
103 if v.Z < min.Z {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
104 min.Z = v.Z
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
105 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
106 if v.Z > max.Z {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
107 max.Z = v.Z
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
108 maxIdx = i
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
109 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
110
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
111 max.Maximize(v)
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
112 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
113
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
114 log.Printf("(%.5f, %.5f, %.5f) - (%.5f, %.5f, %.5f)\n",
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
115 min.X, min.Y, min.Z,
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
116 max.X, max.Y, max.Z)
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
117
3771
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
118 below := min.Z - 3*tolerance
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
119 xMin := min.X - tolerance
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
120 xMax := max.X + tolerance
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
121 yMin := min.Y - tolerance
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
122 yMax := max.Y + tolerance
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
123
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
124 corners := []octree.Vertex{
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
125 {xMin, yMin, below},
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
126 {xMax, yMin, below},
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
127 {xMax, yMax, below},
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
128 {xMin, yMax, below},
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
129 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
130
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
131 top := points[maxIdx]
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
132
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
133 tris := make([]octree.Triangle, len(corners))
3770
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
134 planes := make([]octree.Plane3D, len(corners))
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
135
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
136 for i, v1 := range corners {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
137 v2 := corners[(i+1)%len(corners)]
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
138 tris[i] = octree.Triangle{v1, v2, top}
3770
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
139 planes[i] = tris[i].Plane3D()
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
140 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
141
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
142 parts := make([][]octree.Vertex, len(tris))
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
143
3770
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
144 maxDists := make([]float64, len(planes))
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
145 maxIdxs := make([]int, len(planes))
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
146
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
147 nextPoint:
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
148 for i, v := range points {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
149 if i == maxIdx {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
150 continue
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
151 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
152
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
153 for j := range tris {
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
154 if tris[j].Contains(v.X, v.Y) {
3770
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
155 if dist := math.Abs(planes[j].Eval(v)); dist > maxDists[j] {
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
156 maxDists[j] = dist
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
157 maxIdxs[j] = len(parts[j])
71164b817d6e Calculate distance from planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3769
diff changeset
158 }
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
159 parts[j] = append(parts[j], v)
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
160 continue nextPoint
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
161 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
162 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
163 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
164
3771
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
165 result := make([]octree.Vertex, 0, len(points))
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
166
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
167 var handleTriangle func(*octree.Triangle, float64, int, []octree.Vertex) bool
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
168
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
169 handleTriangle = func(
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
170 t *octree.Triangle,
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
171 maxDist float64, maxIdx int,
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
172 points []octree.Vertex,
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
173 ) bool {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
174 if maxDist <= tolerance {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
175 return false
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
176 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
177
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
178 if len(points) == 1 {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
179 result = append(result, points[0])
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
180 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
181
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
182 var (
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
183 tris [3]octree.Triangle
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
184 planes [3]octree.Plane3D
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
185 maxDists [3]float64
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
186 maxIdxs [3]int
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
187 parts [3][]octree.Vertex
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
188 )
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
189
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
190 top := points[maxIdx]
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
191 for i := 0; i < 3; i++ {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
192 tris[i] = octree.Triangle{t[i], t[(i+1)%3], top}
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
193 planes[i] = tris[i].Plane3D()
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
194 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
195
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
196 nextPoint:
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
197 for i, v := range points {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
198 if i == maxIdx {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
199 continue
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
200 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
201
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
202 for j := range tris {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
203 if tris[j].Contains(v.X, v.Y) {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
204 if dist := math.Abs(planes[j].Eval(v)); dist > maxDists[j] {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
205 maxDists[j] = dist
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
206 maxIdxs[j] = len(parts[j])
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
207 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
208 parts[j] = append(parts[j], v)
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
209 continue nextPoint
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
210 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
211 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
212 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
213
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
214 var found bool
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
215 for i, part := range parts {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
216 if len(part) > 0 && handleTriangle(&tris[i], maxDists[i], maxIdxs[i], part) {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
217 found = true
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
218 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
219 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
220
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
221 if found {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
222 result = append(result, top)
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
223 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
224
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
225 return found
3769
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
226 }
6838526df94c Initial partitioning of the input data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3768
diff changeset
227
3771
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
228 var found bool
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
229 for i, part := range parts {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
230 if len(part) > 0 && handleTriangle(&tris[i], maxDists[i], maxIdxs[i], part) {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
231 found = true
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
232 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
233 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
234
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
235 if found {
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
236 result = append(result, top)
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
237 }
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
238
b7530ed07561 Partition recursively. Does not produce good triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3770
diff changeset
239 return result
3768
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 func main() {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244 var tolerance float64
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 flag.Float64Var(&tolerance, "t", 0.1, "accepted tolerance (shorthand)")
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 flag.Float64Var(&tolerance, "tolerance", 0.1, "accepted tolerance")
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 flag.Parse()
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 points, err := loadXYZ(os.Stdin)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 if err != nil {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 log.Fatalf("err: %v\n", err)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 points = simplify(points, tolerance)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
258 if err := storeXYZ(points, os.Stdout); err != nil {
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
259 log.Fatalf("err: %v\n", err)
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
260 }
9e3d92785918 Simple test driver for point simplification. Reads from STDIN, writes to STDOUT.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 }