Mercurial > gemma
annotate pkg/octree/vertex.go @ 3674:a3d1fce63c9e
import_configuration: search for user and country
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Mon, 17 Jun 2019 16:24:46 +0200 |
parents | a6c671abbc35 |
children | 71164b817d6e |
rev | line source |
---|---|
1017
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
2 // without warranty, see README.md and license for details. |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
3 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
6 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
9 // Software engineering by Intevation GmbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
10 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
11 // Author(s): |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
988
diff
changeset
|
13 |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
14 package octree |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
16 import ( |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
17 "bytes" |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
18 "encoding/binary" |
2529
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
19 "fmt" |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
20 "io" |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
21 "log" |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
22 "math" |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
23 "sort" |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
24 |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
25 "gemma.intevation.de/gemma/pkg/wkb" |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
26 ) |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
28 type ( |
2572
7686c7c23506
Morphological differences: Moved some code into octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2529
diff
changeset
|
29 Point struct { |
7686c7c23506
Morphological differences: Moved some code into octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2529
diff
changeset
|
30 X float64 |
7686c7c23506
Morphological differences: Moved some code into octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2529
diff
changeset
|
31 Y float64 |
7686c7c23506
Morphological differences: Moved some code into octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2529
diff
changeset
|
32 } |
7686c7c23506
Morphological differences: Moved some code into octree package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2529
diff
changeset
|
33 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
34 // Vertex is a 3D vertex. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
35 Vertex struct { |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
36 X float64 |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
37 Y float64 |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
38 Z float64 |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
39 } |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
40 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
41 // Triangle is a triangle consisting of three vertices. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
42 Triangle [3]Vertex |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
43 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
44 // Line is a line defined by first vertex on that line |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
45 // and the second being the direction. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
46 Line [2]Vertex |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
47 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
48 // MultiPointZ is a set of vertices. |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
49 MultiPointZ []Vertex |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
50 |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
51 // LineStringZ is a line string formed of vertices. |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
52 LineStringZ []Vertex |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
53 |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
54 // MultiLineStringZ is a set of line strings. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
55 MultiLineStringZ []LineStringZ |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
56 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
57 // Box2D is 2D area from (X1, Y1) to (X2, Y2). |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
58 Box2D struct { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
59 X1 float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
60 Y1 float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
61 X2 float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
62 Y2 float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
63 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
64 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
65 // Plane2D is a 2D plane (a line in 2D space). |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
66 Plane2D struct { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
67 A float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
68 B float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
69 C float64 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
70 } |
2466
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
71 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
72 Plane3D struct { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
73 A float64 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
74 B float64 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
75 C float64 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
76 D float64 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
77 } |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
78 ) |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
79 |
2466
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
80 func (t *Triangle) Plane3D() Plane3D { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
81 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
82 v0 := t[1].Sub(t[0]) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
83 v1 := t[2].Sub(t[0]) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
84 n := v0.Cross(v1).Normalize() |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
85 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
86 // x*nx+ y*ny+ z*nz + d = 0 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
87 // d = - (x*nx+ y*ny + z*nz) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
88 d := -t[0].Dot(n) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
89 return Plane3D{ |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
90 A: n.X, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
91 B: n.Y, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
92 C: n.Z, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
93 D: d, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
94 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
95 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
96 |
2494
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
97 func (t *Triangle) BBox() Box2D { |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
98 minX := math.Min(math.Min(t[0].X, t[1].X), t[2].X) |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
99 maxX := math.Max(math.Max(t[0].X, t[1].X), t[2].X) |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
100 minY := math.Min(math.Min(t[0].Y, t[1].Y), t[2].Y) |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
101 maxY := math.Max(math.Max(t[0].Y, t[1].Y), t[2].Y) |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
102 return Box2D{ |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
103 X1: minX, Y1: minY, |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
104 X2: maxX, Y2: maxY, |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
105 } |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
106 } |
a727e0426240
More on triangle/clipping polygon intersection. TODO: line segment / line segment intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2492
diff
changeset
|
107 |
2466
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
108 func (p Plane3D) Z(x, y float64) float64 { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
109 // p.A*x + p.B*y + p.C*z + p.D = 0 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
110 return -(p.A*x + p.B*y + p.D) / p.C |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
111 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
112 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
113 func (v Vertex) Normalize() Vertex { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
114 s := 1 / v.Length() |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
115 return Vertex{ |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
116 X: s * v.X, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
117 Y: s * v.Y, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
118 Z: s * v.Z, |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
119 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
120 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
121 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
122 func (v Vertex) Dot(w Vertex) float64 { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
123 return v.X*w.X + v.Y*w.Y + v.Z*w.Z |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
124 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
125 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
126 func (v Vertex) Length() float64 { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
127 return math.Sqrt(v.Dot(v)) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
128 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
129 |
2483
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
130 func area(a, b, c Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
131 return (b.Y-a.Y)*(c.X-b.X) - (b.X-a.X)*(c.Y-b.Y) |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
132 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
133 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
134 func inCircle(a, b, c, p Vertex) bool { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
135 dx := a.X - p.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
136 dy := a.Y - p.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
137 ex := b.X - p.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
138 ey := b.Y - p.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
139 fx := c.X - p.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
140 fy := c.Y - p.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
141 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
142 ap := dx*dx + dy*dy |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
143 bp := ex*ex + ey*ey |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
144 cp := fx*fx + fy*fy |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
145 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
146 return dx*(ey*cp-bp*fy)-dy*(ex*cp-bp*fx)+ap*(ex*fy-ey*fx) < 0 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
147 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
148 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
149 func circumradius(a, b, c Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
150 dx := b.X - a.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
151 dy := b.Y - a.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
152 ex := c.X - a.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
153 ey := c.Y - a.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
154 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
155 bl := dx*dx + dy*dy |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
156 cl := ex*ex + ey*ey |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
157 d := dx*ey - dy*ex |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
158 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
159 x := (ey*bl - dy*cl) * 0.5 / d |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
160 y := (dx*cl - ex*bl) * 0.5 / d |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
161 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
162 r := x*x + y*y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
163 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
164 if bl == 0 || cl == 0 || d == 0 || r == 0 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
165 return infinity |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
166 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
167 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
168 return r |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
169 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
170 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
171 func circumcenter(a, b, c Vertex) Vertex { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
172 dx := b.X - a.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
173 dy := b.Y - a.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
174 ex := c.X - a.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
175 ey := c.Y - a.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
176 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
177 bl := dx*dx + dy*dy |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
178 cl := ex*ex + ey*ey |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
179 d := dx*ey - dy*ex |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
180 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
181 x := a.X + (ey*bl-dy*cl)*0.5/d |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
182 y := a.Y + (dx*cl-ex*bl)*0.5/d |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
183 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
184 return Vertex{X: x, Y: y} |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
185 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
186 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
187 func polygonArea(points []Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
188 var result float64 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
189 for i, p := range points { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
190 q := points[(i+1)%len(points)] |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
191 result += (p.X - q.X) * (p.Y + q.Y) |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
192 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
193 return result / 2 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
194 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
195 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
196 func polygonPerimeter(points []Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
197 if len(points) == 0 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
198 return 0 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
199 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
200 var result float64 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
201 q := points[len(points)-1] |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
202 for _, p := range points { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
203 result += p.Distance2D(q) |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
204 q = p |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
205 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
206 return result |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
207 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
208 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
209 func (v Vertex) Distance2D(w Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
210 return math.Hypot(v.X-w.X, v.Y-w.Y) |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
211 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
212 |
3650
01ce3ba9b0d0
Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3646
diff
changeset
|
213 func (v Vertex) Distance(w Vertex) float64 { |
01ce3ba9b0d0
Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3646
diff
changeset
|
214 v = v.Sub(w) |
01ce3ba9b0d0
Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3646
diff
changeset
|
215 return math.Sqrt(v.Dot(v)) |
01ce3ba9b0d0
Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3646
diff
changeset
|
216 } |
01ce3ba9b0d0
Fixed generating of random points.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3646
diff
changeset
|
217 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
218 // Minimize adjust this vertex v to hold the minimum |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
219 // values component-wise of v and w. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
220 func (v *Vertex) Minimize(w Vertex) { |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
221 if w.X < v.X { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
222 v.X = w.X |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
223 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
224 if w.Y < v.Y { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
225 v.Y = w.Y |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
227 if w.Z < v.Z { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
228 v.Z = w.Z |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
232 // Maximize adjust this vertex v to hold the maximum |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
233 // values component-wise of v and w. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
234 func (v *Vertex) Maximize(w Vertex) { |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
235 if w.X > v.X { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
236 v.X = w.X |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
237 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
238 if w.Y > v.Y { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
239 v.Y = w.Y |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
240 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
241 if w.Z > v.Z { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
242 v.Z = w.Z |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
243 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
244 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
245 |
2483
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
246 func (v Vertex) SquaredDistance2D(w Vertex) float64 { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
247 dx := v.X - w.X |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
248 dy := v.Y - w.Y |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
249 return dx*dx + dy*dy |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
250 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
251 |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
252 // Sub2D returns (v - w) component-wise. |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
253 func (v Vertex) Sub2D(w Vertex) Vertex { |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
254 return Vertex{ |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
255 X: v.X - w.X, |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
256 Y: v.Y - w.Y, |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
257 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
258 } |
620038ade708
Incorporated fogleman's fast Delaunay triangulation adjuted to our vertex model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2472
diff
changeset
|
259 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
260 // Sub returns (v - w) component-wise. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
261 func (v Vertex) Sub(w Vertex) Vertex { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
262 return Vertex{ |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
263 v.X - w.X, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
264 v.Y - w.Y, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
265 v.Z - w.Z, |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
266 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
267 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
268 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
269 // Add returns (v + w) component-wise. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
270 func (v Vertex) Add(w Vertex) Vertex { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
271 return Vertex{ |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
272 v.X + w.X, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
273 v.Y + w.Y, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
274 v.Z + w.Z, |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
275 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
276 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
277 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
278 // Scale returns s*v component-wise. |
730
4c05bdbf8e4b
Renamed scale in Vertex to uppercase to make it public.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
729
diff
changeset
|
279 func (v Vertex) Scale(s float64) Vertex { |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
280 return Vertex{ |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
281 s * v.X, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
282 s * v.Y, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
283 s * v.Z, |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
284 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
285 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
286 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
287 // Interpolate returns a function that return s*v2 + v1 |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
288 // component-wise. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
289 func Interpolate(v1, v2 Vertex) func(Vertex) Vertex { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
290 v2 = v2.Sub(v1) |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
291 return func(s Vertex) Vertex { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
292 return Vertex{ |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
293 v2.X*s.X + v1.X, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
294 v2.Y*s.Y + v1.Y, |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
295 v2.Z*s.Z + v1.Z, |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
296 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
297 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
298 } |
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
299 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
300 // Less returns if one of v component is less than the |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
301 // corresponing component in w. |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
302 func (v Vertex) Less(w Vertex) bool { |
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
303 return v.X < w.X || v.Y < w.Y || v.Z < w.Z |
674
120a82bd9953
octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
304 } |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
305 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
306 // NewLine return a line of point/direction. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
307 func NewLine(p1, p2 Vertex) Line { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
308 return Line{ |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
309 p2.Sub(p1), |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
310 p1, |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
311 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
312 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
313 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
314 // Eval returns the vertex for t*l[0] + l[1]. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
315 func (l Line) Eval(t float64) Vertex { |
730
4c05bdbf8e4b
Renamed scale in Vertex to uppercase to make it public.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
729
diff
changeset
|
316 return l[0].Scale(t).Add(l[1]) |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
317 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
318 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
319 // IntersectHorizontal returns the intersection point |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
320 // for a given z value. |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
321 func (l Line) IntersectHorizontal(h float64) Vertex { |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
322 t := (h - l[1].Z) / l[0].Z |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
323 return l.Eval(t) |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
324 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
325 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
326 func side(z, h float64) int { |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
327 switch { |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
328 case z < h: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
329 return -1 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
330 case z > h: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
331 return +1 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
332 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
333 return 0 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
334 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
335 |
2466
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
336 func (v Vertex) Dot2(w Vertex) float64 { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
337 return v.X*w.X + v.Y*w.Y |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
338 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
339 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
340 func (t *Triangle) Contains(x, y float64) bool { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
341 v0 := t[2].Sub(t[0]) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
342 v1 := t[1].Sub(t[0]) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
343 v2 := Vertex{X: x, Y: y}.Sub(t[0]) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
344 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
345 dot00 := v0.Dot2(v0) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
346 dot01 := v0.Dot2(v1) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
347 dot02 := v0.Dot2(v2) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
348 dot11 := v1.Dot2(v1) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
349 dot12 := v1.Dot2(v2) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
350 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
351 // Compute barycentric coordinates |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
352 invDenom := 1 / (dot00*dot11 - dot01*dot01) |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
353 u := (dot11*dot02 - dot01*dot12) * invDenom |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
354 v := (dot00*dot12 - dot01*dot02) * invDenom |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
355 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
356 // Check if point is in triangle |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
357 return u >= 0 && v >= 0 && u+v < 1 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
358 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
359 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
360 // IntersectHorizontal calculates the line string that |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
361 // results when cutting a triangle a a certain height. |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
362 // Can be empty (on intersection), |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
363 // one vertex (only touching an vertex) or |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
364 // two vertices (real intersection). |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
365 func (t *Triangle) IntersectHorizontal(h float64) LineStringZ { |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
366 sides := [3]int{ |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
367 side(t[0].Z, h), |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
368 side(t[1].Z, h), |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
369 side(t[2].Z, h), |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
370 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
371 |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
372 var points LineStringZ |
689
614135d69823
octree: prepare storing the lines to file in contouring tool.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
687
diff
changeset
|
373 |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
374 for i := 0; i < 3; i++ { |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
375 j := (i + 1) % 3 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
376 si := sides[i] |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
377 sj := sides[j] |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
378 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
379 switch { |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
380 case si == 0 && sj == 0: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
381 // both on plane |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
382 points = append(points, t[i], t[j]) |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
383 case si == 0 && sj != 0: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
384 // first on plane |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
385 points = append(points, t[i]) |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
386 case si != 0 && sj == 0: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
387 // second on plane |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
388 points = append(points, t[j]) |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
389 case si == sj: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
390 // both on same side |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
391 default: |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
392 // real intersection |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
393 v := NewLine(t[i], t[j]).IntersectHorizontal(h) |
687
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
394 points = append(points, v) |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
395 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
396 } |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
397 |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
398 return points |
be90ab542aa7
octree: contouring: Do the math to calculate the intersection points of the triangles and the planes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
674
diff
changeset
|
399 } |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
400 |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
401 func linearScale(x1, y1, x2, y2 float64) func(Vertex) float64 { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
402 dx := x2 - x1 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
403 dy := y2 - y1 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
404 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
405 switch { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
406 case dx != 0: |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
407 return func(v Vertex) float64 { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
408 return (v.X - x1) / dx |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
409 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
410 case dy != 0: |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
411 return func(v Vertex) float64 { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
412 return (v.Y - y1) / dy |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
413 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
414 default: |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
415 return func(Vertex) float64 { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
416 return 0 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
417 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
418 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
419 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
420 |
3639
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
421 func (ls LineStringZ) BBox() Box2D { |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
422 |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
423 min := Vertex{math.MaxFloat64, math.MaxFloat64, math.MaxFloat64} |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
424 max := Vertex{-math.MaxFloat64, -math.MaxFloat64, -math.MaxFloat64} |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
425 |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
426 for _, v := range ls { |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
427 min.Minimize(v) |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
428 max.Maximize(v) |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
429 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
430 |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
431 return Box2D{ |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
432 X1: min.X, |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
433 Y1: min.Y, |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
434 X2: max.X, |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
435 Y2: max.Y, |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
436 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
437 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
438 |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
439 func (ls LineStringZ) Area() float64 { |
3646
810b28f59b8b
Generate random points for second mesh.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3639
diff
changeset
|
440 return polygonArea(ls) |
3639
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
441 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
442 |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
443 func (ls LineStringZ) Reverse() { |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
444 for i, j := 0, len(ls)-1; i < j; i, j = i+1, j-1 { |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
445 ls[i], ls[j] = ls[j], ls[i] |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
446 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
447 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
448 |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
449 func (ls LineStringZ) order(position func(Vertex) float64) { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
450 type posVertex struct { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
451 pos float64 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
452 v Vertex |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
453 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
454 positions := make([]posVertex, len(ls)) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
455 for i, v := range ls { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
456 positions[i] = posVertex{position(v), v} |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
457 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
458 sort.Slice(positions, func(i, j int) bool { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
459 return positions[i].pos < positions[j].pos |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
460 }) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
461 for i := range positions { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
462 ls[i] = positions[i].v |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
463 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
464 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
465 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
466 // EpsEquals returns true if v and w are equal component-wise |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
467 // with the values within a epsilon range. |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
468 func (v Vertex) EpsEquals(w Vertex) bool { |
769
ba2007b746ef
Fixed nasty typo.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
768
diff
changeset
|
469 const eps = 1e-5 |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
470 return math.Abs(v.X-w.X) < eps && |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
471 math.Abs(v.Y-w.Y) < eps && math.Abs(v.Z-w.Z) < eps |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
472 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
473 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
474 // JoinOnLine joins the the elements of a given multi line string |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
475 // under the assumption that the segments are all on the line segment |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
476 // from (x1, y1) to (x2, y2). |
763
d05bc3e34338
More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
730
diff
changeset
|
477 func (mls MultiLineStringZ) JoinOnLine(x1, y1, x2, y2 float64) MultiLineStringZ { |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
478 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
479 position := linearScale(x1, y1, x2, y2) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
480 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
481 type posLineString struct { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
482 pos float64 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
483 line LineStringZ |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
484 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
485 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
486 positions := make([]posLineString, 0, len(mls)) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
487 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
488 for _, ls := range mls { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
489 if len(ls) == 0 { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
490 continue |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
491 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
492 // order the atoms first |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
493 ls.order(position) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
494 positions = append(positions, posLineString{position(ls[0]), ls}) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
495 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
496 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
497 sort.Slice(positions, func(i, j int) bool { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
498 return positions[i].pos < positions[j].pos |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
499 }) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
500 |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
501 out := make(MultiLineStringZ, 0, len(positions)) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
502 |
796
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
503 var ignored int |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
504 |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
505 for i := range positions { |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
506 curr := positions[i].line |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
507 if l := len(out); l > 0 { |
796
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
508 last := out[l-1] |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
509 |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
510 if last[len(last)-1].EpsEquals(curr[0]) { |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
511 out[l-1] = append(last[:len(last)-1], curr...) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
512 continue |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
513 } |
796
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
514 if position(last[len(last)-1]) > position(curr[0]) { |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
515 ignored++ |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
516 continue |
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
517 } |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
518 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
519 out = append(out, curr) |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
520 } |
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
521 |
1691
de09bd3b5c05
Octree: Fixed a few golint quirks and normalized logging a bit.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
1329
diff
changeset
|
522 log.Printf("info: ignored parts: %d\n", ignored) |
796
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
523 |
768
3219e7e34953
Join neighbored linestring segments in octree cross sections and sort them along the input line.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
763
diff
changeset
|
524 return out |
763
d05bc3e34338
More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
730
diff
changeset
|
525 } |
d05bc3e34338
More infrastructure for the octree driven cross section endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
730
diff
changeset
|
526 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
527 // Write writes a Vertex as three 64 bit values in little endian order |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
528 // to the given writer. |
729
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
529 func (v *Vertex) Write(w io.Writer) error { |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
530 if err := binary.Write( |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
531 w, binary.LittleEndian, math.Float64bits(v.X)); err != nil { |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
532 return err |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
533 } |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
534 if err := binary.Write( |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
535 w, binary.LittleEndian, math.Float64bits(v.Y)); err != nil { |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
536 return err |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
537 } |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
538 return binary.Write( |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
539 w, binary.LittleEndian, math.Float64bits(v.Z)) |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
540 } |
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
541 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
542 // Read fills this vertex with three 64 bit values stored as |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
543 // little endian from the given reader. |
729
b0bd242ff821
Removed vertex duplicate.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
727
diff
changeset
|
544 func (v *Vertex) Read(r io.Reader) error { |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
545 var buf [8]byte |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
546 b := buf[:] |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
547 if _, err := io.ReadFull(r, b); err != nil { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
548 return nil |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
549 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
550 v.X = math.Float64frombits(binary.LittleEndian.Uint64(b)) |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
551 if _, err := io.ReadFull(r, b); err != nil { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
552 return nil |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
553 } |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
554 v.Y = math.Float64frombits(binary.LittleEndian.Uint64(b)) |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
555 if _, err := io.ReadFull(r, b); err != nil { |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
556 return nil |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
557 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
558 v.Z = math.Float64frombits(binary.LittleEndian.Uint64(b)) |
726
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
559 return nil |
5af9ab39e715
Renamed a few types to uppercase names to prepare the move to the octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
718
diff
changeset
|
560 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
561 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
562 // AsWKB returns the WKB representation of the given multi line string. |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
563 func (mls MultiLineStringZ) AsWKB() []byte { |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
564 |
924
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
565 // pre-calculate size to avoid reallocations. |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
566 size := 1 + 4 + 4 |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
567 for _, ml := range mls { |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
568 size += 1 + 4 + 4 + len(ml)*3*8 |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
569 } |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
570 |
924
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
571 buf := bytes.NewBuffer(make([]byte, 0, size)) |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
572 |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
573 binary.Write(buf, binary.LittleEndian, wkb.NDR) |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
574 binary.Write(buf, binary.LittleEndian, wkb.MultiLineStringZ) |
924
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
575 binary.Write(buf, binary.LittleEndian, uint32(len(mls))) |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
576 |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
577 for _, ml := range mls { |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
578 binary.Write(buf, binary.LittleEndian, wkb.NDR) |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
579 binary.Write(buf, binary.LittleEndian, wkb.LineStringZ) |
924
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
580 binary.Write(buf, binary.LittleEndian, uint32(len(ml))) |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
581 for _, p := range ml { |
924
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
582 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
583 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) |
c8146132059e
Precalculate WKB size for MultiLineStringZ to avoid reallocations.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
824
diff
changeset
|
584 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Z)) |
727
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
585 } |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
586 } |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
587 |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
588 return buf.Bytes() |
41c8dc61f38f
Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
726
diff
changeset
|
589 } |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
590 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
591 // AsWKB2D returns the WKB representation of the given multi line string |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
592 // leaving the z component out. |
925
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
593 func (mls MultiLineStringZ) AsWKB2D() []byte { |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
594 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
595 // pre-calculate size to avoid reallocations. |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
596 size := 1 + 4 + 4 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
597 for _, ml := range mls { |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
598 size += 1 + 4 + 4 + len(ml)*2*8 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
599 } |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
600 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
601 buf := bytes.NewBuffer(make([]byte, 0, size)) |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
602 |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
603 binary.Write(buf, binary.LittleEndian, wkb.NDR) |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
604 binary.Write(buf, binary.LittleEndian, wkb.MultiLineString) |
925
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
605 binary.Write(buf, binary.LittleEndian, uint32(len(mls))) |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
606 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
607 for _, ml := range mls { |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
608 binary.Write(buf, binary.LittleEndian, wkb.NDR) |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
609 binary.Write(buf, binary.LittleEndian, wkb.LineString) |
925
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
610 binary.Write(buf, binary.LittleEndian, uint32(len(ml))) |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
611 for _, p := range ml { |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
612 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
613 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
614 } |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
615 } |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
616 |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
617 return buf.Bytes() |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
618 } |
15bf101e1522
Send 2D X/Y vertices to the database directly instead of sending 3D data and dropping the Z value afterwards.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
924
diff
changeset
|
619 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
620 // Join joins two lines leaving the first of the second out. |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
621 func (ls LineStringZ) Join(other LineStringZ) LineStringZ { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
622 nline := make(LineStringZ, len(ls)+len(other)-1) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
623 copy(nline, ls) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
624 copy(nline[len(ls):], other[1:]) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
625 return nline |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
626 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
627 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
628 // Merge merges line segments of a given multi line string |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
629 // by finding common start and end vertices. |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
630 func (mls MultiLineStringZ) Merge() MultiLineStringZ { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
631 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
632 var out MultiLineStringZ |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
633 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
634 min := Vertex{math.MaxFloat64, math.MaxFloat64, math.MaxFloat64} |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
635 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
636 for _, line := range mls { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
637 for _, v := range line { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
638 min.Minimize(v) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
639 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
640 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
641 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
642 type point struct { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
643 x int64 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
644 y int64 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
645 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
646 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
647 const precision = 1e7 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
648 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
649 quant := func(v Vertex) point { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
650 return point{ |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
651 x: int64(math.Round((v.X - min.X) * precision)), |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
652 y: int64(math.Round((v.Y - min.Y) * precision)), |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
653 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
654 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
655 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
656 heads := make(map[point]*[]LineStringZ) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
657 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
658 for _, line := range mls { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
659 if len(line) < 2 { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
660 out = append(out, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
661 continue |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
662 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
663 head := quant(line[0]) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
664 tail := quant(line[len(line)-1]) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
665 if head == tail { // its already a ring |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
666 out = append(out, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
667 continue |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
668 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
669 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
670 if hs := heads[tail]; hs != nil { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
671 l := len(*hs) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
672 last := (*hs)[l-1] |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
673 if l == 1 { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
674 delete(heads, tail) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
675 } else { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
676 (*hs)[l-1] = nil |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
677 *hs = (*hs)[:l-1] |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
678 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
679 line = line.Join(last) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
680 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
681 if head == quant(line[len(line)-1]) { // its a ring |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
682 out = append(out, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
683 continue |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
684 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
685 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
686 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
687 if hs := heads[head]; hs != nil { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
688 *hs = append(*hs, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
689 } else { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
690 heads[head] = &[]LineStringZ{line} |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
691 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
692 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
693 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
694 again: |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
695 for head, lines := range heads { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
696 for i, line := range *lines { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
697 tail := quant(line[len(line)-1]) |
940
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
698 for hs := heads[tail]; hs != nil && len(*hs) > 0; hs = heads[tail] { |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
699 l := len(*hs) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
700 last := (*hs)[l-1] |
940
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
701 (*hs)[l-1] = nil |
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
702 *hs = (*hs)[:l-1] |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
703 line = line.Join(last) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
704 |
940
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
705 if tail = quant(line[len(line)-1]); head == tail { // its a ring |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
706 out = append(out, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
707 // remove from current lines |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
708 copy((*lines)[i:], (*lines)[i+1:]) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
709 (*lines)[len(*lines)-1] = nil |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
710 *lines = (*lines)[:len(*lines)-1] |
940
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
711 goto again |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
712 } |
940
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
713 // overwrite in current lines |
be7b83638ec8
Simplified line merging in generating contour lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
928
diff
changeset
|
714 (*lines)[i] = line |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
715 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
716 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
717 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
718 |
988
7dfd3db94e6d
In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
968
diff
changeset
|
719 // rings := len(out) |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
720 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
721 // The rest are open line strings. |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
722 for _, lines := range heads { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
723 for _, line := range *lines { |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
724 out = append(out, line) |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
725 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
726 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
727 |
988
7dfd3db94e6d
In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
968
diff
changeset
|
728 // log.Printf("segments before/after merge: %d/%d (%d rings)\n", |
7dfd3db94e6d
In preparation of persisting import jobs logging is done through an interface.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
968
diff
changeset
|
729 // len(mls), len(out), rings) |
928
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
730 |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
731 return out |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
732 } |
0a0013fbda4a
octree2contour: Merge multi linestrings in user land before sending them to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
925
diff
changeset
|
733 |
2492
10681749371d
Implemented the BBox/clipping polygon test. TODO: triangle/clipping polygon test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2483
diff
changeset
|
734 func (a Box2D) Rect(interface{}) ([]float64, []float64) { |
10681749371d
Implemented the BBox/clipping polygon test. TODO: triangle/clipping polygon test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2483
diff
changeset
|
735 return []float64{a.X1, a.Y1}, []float64{a.X2, a.Y2} |
10681749371d
Implemented the BBox/clipping polygon test. TODO: triangle/clipping polygon test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2483
diff
changeset
|
736 } |
10681749371d
Implemented the BBox/clipping polygon test. TODO: triangle/clipping polygon test.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2483
diff
changeset
|
737 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
738 // Intersects checks if two Box2Ds intersect. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
739 func (a Box2D) Intersects(b Box2D) bool { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
740 return !(a.X2 < a.X1 || a.X2 < b.X1 || |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
741 a.Y2 < a.Y1 || a.Y2 < b.Y1) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
742 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
743 |
2466
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
744 func (a Box2D) Contains(x, y float64) bool { |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
745 return a.X1 <= x && x <= a.X2 && |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
746 a.Y1 <= y && y <= a.Y2 |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
747 } |
a1e751c08c56
Calculate difference on single core.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1692
diff
changeset
|
748 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
749 // Xi returns the i-th x component. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
750 func (a Box2D) Xi(i int) float64 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
751 if i == 0 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
752 return a.X1 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
753 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
754 return a.X2 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
755 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
756 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
757 // Yi returns the i-th y component. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
758 func (a Box2D) Yi(i int) float64 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
759 if i == 0 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
760 return a.Y1 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
761 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
762 return a.Y2 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
763 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
764 |
2512
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
765 func (a Box2D) Union(b Box2D) Box2D { |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
766 return Box2D{ |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
767 X1: math.Min(a.X1, b.X1), |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
768 Y1: math.Min(a.Y1, b.Y1), |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
769 X2: math.Max(a.X2, b.X2), |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
770 Y2: math.Max(a.Y2, b.Y2), |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
771 } |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
772 } |
2768f74d54ab
Added an STRTree for the triangulation. Should be better suited for filtering out the clipped triangles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2494
diff
changeset
|
773 |
3639
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
774 func (a Box2D) Area() float64 { |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
775 return (a.X2 - a.X1) * (a.Y2 - a.Y1) |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
776 } |
2a4216c81e7b
Extract the removed triangles from first triangulation, too. Useful to build a artifical DEM for second pass.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2572
diff
changeset
|
777 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
778 // NewPlane2D creates a new Plane2D from two given points. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
779 func NewPlane2D(x1, y1, x2, y2 float64) Plane2D { |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
780 b := x2 - x1 |
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
781 a := -(y2 - y1) |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
782 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
783 l := math.Sqrt(a*a + b*b) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
784 a /= l |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
785 b /= l |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
786 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
787 // a*x1 + b*y1 + c = 0 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
788 c := -(a*x1 + b*y1) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
789 return Plane2D{a, b, c} |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
790 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
791 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
792 // Eval determines the distance of a given point |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
793 // from the plane. The sign of the result indicates |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
794 // the sideness. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
795 func (p Plane2D) Eval(x, y float64) float64 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
796 return p.A*x + p.B*y + p.C |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
797 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
798 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
799 const epsPlane = 1e-5 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
800 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
801 func sides(s int, x float64) int { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
802 if math.Signbit(x) { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
803 return s | 2 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
804 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
805 return s | 1 |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
806 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
807 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
808 // IntersectsPlane checks if a Box2D intersects with |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
809 // a given Plane2D. |
774
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
810 func (a Box2D) IntersectsPlane(p Plane2D) bool { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
811 var s int |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
812 for i := 0; i < 2; i++ { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
813 x := a.Xi(i) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
814 for j := 0; j < 2; j++ { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
815 y := a.Yi(j) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
816 v := p.Eval(x, y) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
817 if math.Abs(v) < epsPlane { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
818 //log.Printf("on line") |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
819 return true |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
820 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
821 if s = sides(s, v); s == 3 { |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
822 //log.Printf("... on both sides (djt)") |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
823 return true |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
824 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
825 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
826 } |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
827 //log.Printf("side: %d\n", s) |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
828 return false |
c55771b7c502
Moved Box2D and Plane2D into vertex.go and made to API public.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
769
diff
changeset
|
829 } |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
830 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
831 // Cross calculates the cross product of two vertices. |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
832 func (v Vertex) Cross(w Vertex) Vertex { |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
833 return Vertex{ |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
834 v.Y*w.Z - v.Z*w.Y, |
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
835 v.Z*w.X - v.X*w.Z, |
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
836 v.X*w.Y - v.Y*w.X, |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
837 } |
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
838 } |
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
839 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
840 // Intersection calcultes the 2D intersection point of |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
841 // two Plane2Ds. If they do not intersect the returned |
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
842 // bool flags is set to false. |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
843 func (p Plane2D) Intersection(o Plane2D) (float64, float64, bool) { |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
844 |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
845 u1 := Vertex{p.A, p.B, p.C} |
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
846 u2 := Vertex{o.A, o.B, o.C} |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
847 |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
848 plane := u1.Cross(u2) |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
849 |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
850 if plane.Z == 0 { |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
851 return 0, 0, false |
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
852 } |
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
853 |
1329
ea2143adc6d3
Named method recievers consistently to make golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
854 return plane.X / plane.Z, plane.Y / plane.Z, true |
778
9be20bd0f131
Fixed a bug with 2d planes (lines) found while working on line intersections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
774
diff
changeset
|
855 } |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
856 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
857 // VerticalLine is a 2D line segment. |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
858 type VerticalLine struct { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
859 x1 float64 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
860 y1 float64 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
861 x2 float64 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
862 y2 float64 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
863 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
864 line Plane2D |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
865 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
866 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
867 // NewVerticalLine creates a new 2D line segment. |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
868 func NewVerticalLine(x1, y1, x2, y2 float64) *VerticalLine { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
869 return &VerticalLine{ |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
870 x1: x1, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
871 y1: y1, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
872 x2: x2, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
873 y2: y2, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
874 line: NewPlane2D(x1, y1, x2, y2), |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
875 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
876 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
877 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
878 func onPlane(x float64) bool { return math.Abs(x) < epsPlane } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
879 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
880 func relative(v1, v2 Vertex) func(x, y float64) float64 { |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
881 ls := linearScale(v1.X, v1.Y, v2.X, v2.Y) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
882 return func(x, y float64) float64 { |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
883 return ls(Vertex{x, y, 0}) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
884 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
885 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
886 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
887 func interpolate(a, b float64) func(float64) float64 { |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
888 return func(x float64) float64 { |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
889 return (b-a)*x + a |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
890 } |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
891 } |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
892 |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
893 func linear(v1, v2 Vertex) func(t float64) Vertex { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
894 return func(t float64) Vertex { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
895 return Vertex{ |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
896 (v2.X-v1.X)*t + v1.X, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
897 (v2.Y-v1.Y)*t + v1.Y, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
898 (v2.Z-v1.Z)*t + v1.Z, |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
899 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
900 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
901 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
902 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
903 func inRange(a float64) bool { return 0 <= a && a <= 1 } |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
904 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
905 // Intersection intersects a line segment with a triangle. |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
906 func (vl *VerticalLine) Intersection(t *Triangle) LineStringZ { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
907 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
908 var out LineStringZ |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
909 |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
910 //defer func() { log.Printf("length out: %d\n", len(out)) }() |
796
0cc97135717c
More fixes to vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
795
diff
changeset
|
911 |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
912 edges: |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
913 for i := 0; i < 3 && len(out) < 2; i++ { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
914 j := (i + 1) % 3 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
915 edge := NewPlane2D(t[i].X, t[i].Y, t[j].X, t[j].Y) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
916 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
917 s1 := edge.Eval(vl.x1, vl.y1) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
918 s2 := edge.Eval(vl.x2, vl.y2) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
919 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
920 o1 := onPlane(s1) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
921 o2 := onPlane(s2) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
922 |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
923 // log.Printf("s1, s2: %t %t (%f %f)\n", o1, o2, s1, s2) |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
924 |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
925 switch { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
926 case o1 && o2: |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
927 pos := relative(t[i], t[j]) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
928 t1 := pos(vl.x1, vl.y1) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
929 t2 := pos(vl.x2, vl.y2) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
930 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
931 r1 := inRange(t1) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
932 r2 := inRange(t2) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
933 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
934 switch { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
935 case r1 && r2: |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
936 lin := linear(t[i], t[j]) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
937 out = append(out, lin(t1), lin(t2)) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
938 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
939 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
940 case !r1 && !r2: // the hole edge |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
941 out = append(out, t[i], t[j]) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
942 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
943 case !r1: |
789
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
944 if t1 < 0 { |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
945 // below first -> clip by first |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
946 lin := linear(t[i], t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
947 out = append(out, t[i], lin(t2)) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
948 } else { |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
949 // above second -> clip by second |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
950 lin := linear(t[i], t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
951 out = append(out, lin(t2), t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
952 } |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
953 return out |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
954 case !r2: |
789
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
955 if t2 < 0 { |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
956 // below first -> clip by first |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
957 lin := linear(t[i], t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
958 out = append(out, t[i], lin(t1)) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
959 } else { |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
960 // above second -> clip by second |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
961 lin := linear(t[i], t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
962 out = append(out, lin(t1), t[j]) |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
963 } |
d43e61044ad8
Fill in last remaining corner cases in vertical triangle interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
788
diff
changeset
|
964 return out |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
965 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
966 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
967 case o1: |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
968 t1 := relative(t[i], t[j])(vl.x1, vl.y1) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
969 if !inRange(t1) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
970 continue edges |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
971 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
972 out = append(out, linear(t[i], t[j])(t1)) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
973 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
974 case o2: |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
975 t2 := relative(t[i], t[j])(vl.x2, vl.y2) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
976 if !inRange(t2) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
977 continue edges |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
978 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
979 out = append(out, linear(t[i], t[j])(t2)) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
980 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
981 default: |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
982 x, y, intersects := vl.line.Intersection(edge) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
983 if !intersects { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
984 continue edges |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
985 } |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
986 |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
987 // log.Println("Intersection -----------------------------") |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
988 t1 := relative(t[i], t[j])(x, y) |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
989 // log.Printf("relative pos: %f\n", t1) |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
990 if !inRange(t1) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
991 continue edges |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
992 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
993 |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
994 // log.Println("valid ***************") |
795
bd5f38eb6153
Vertical Triangle intersection: Fixed function to determine where intersection point
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
792
diff
changeset
|
995 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
996 z := interpolate(t[j].Z, t[i].Z)(t1) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
997 n := Vertex{x, y, z} |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
998 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
999 if math.Signbit(s1) != math.Signbit(s2) { |
815
01019d4c8359
Cross section: Made triangle intersection less spammy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
813
diff
changeset
|
1000 // log.Println("\ton different sides") |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1001 // different sides -> vertex on edge. |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1002 out = append(out, n) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1003 } else { // same side -> inside. Find peer |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1004 if len(out) > 0 { // we already have our peer |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1005 out = append(out, n) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1006 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1007 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1008 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1009 for k := 0; k < 3; k++ { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1010 if k == i { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1011 continue |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1012 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1013 l := (k + 1) % 3 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1014 other := NewPlane2D(t[k].X, t[k].Y, t[l].X, t[l].Y) |
813
1a808929c2c5
Cross sections: Fixed problem that certain inputs don't deliver data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
796
diff
changeset
|
1015 xo, yo, intersects := vl.line.Intersection(other) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1016 if !intersects { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1017 continue |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1018 } |
813
1a808929c2c5
Cross sections: Fixed problem that certain inputs don't deliver data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
796
diff
changeset
|
1019 t2 := relative(t[k], t[l])(xo, yo) |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1020 if !inRange(t2) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1021 continue |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1022 } |
813
1a808929c2c5
Cross sections: Fixed problem that certain inputs don't deliver data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
796
diff
changeset
|
1023 zo := interpolate(t[k].Z, t[l].Z)(t2) |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1024 |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1025 m := Vertex{xo, yo, zo} |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1026 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1027 var xn, yn, xf, yf float64 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1028 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1029 // Which is nearer to current edge? |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1030 if math.Abs(s1) < math.Abs(s2) { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1031 xn, yn = vl.x1, vl.y1 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1032 xf, yf = vl.x2, vl.y2 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1033 } else { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1034 xn, yn = vl.x2, vl.y2 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1035 xf, yf = vl.x1, vl.y1 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1036 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1037 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1038 if onPlane(other.Eval(xn, yn)) { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1039 // triangle intersect in only point |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1040 // treat as no intersection |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1041 break edges |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1042 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1043 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1044 pos := relative(n, m) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1045 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1046 tzn := pos(xn, yn) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1047 tzf := pos(xf, yf) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1048 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1049 if !inRange(tzn) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1050 // if near is out of range far is, too. |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1051 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1052 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1053 |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1054 lin := interpolate(n.Z, m.Z) |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1055 |
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1056 if inRange(tzf) { |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1057 m.X = xf |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1058 m.Y = yf |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1059 m.Z = lin(tzf) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1060 } // else m is clipping |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1061 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1062 n.X = xn |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1063 n.Y = yn |
788
9f3a4a60dc04
Cleaned up interpolation mess in vertical triangle intersection.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
787
diff
changeset
|
1064 n.Z = lin(tzn) |
787
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1065 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1066 out = append(out, n, m) |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1067 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1068 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1069 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1070 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1071 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1072 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1073 // supress single point touches. |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1074 if len(out) == 1 { |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1075 out = out[:0] |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1076 } |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1077 |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1078 return out |
3d927e06b92c
Triangle intersection. WIP. Currently interpolation is messed up.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
1079 } |
959
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1080 |
1692
f4dcbe8941a1
Octree: Resolved the remaing golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1691
diff
changeset
|
1081 // AsWKB returns a WKB representation of the given point cloud. |
959
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1082 func (mpz MultiPointZ) AsWKB() []byte { |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1083 size := 1 + 4 + 4 + len(mpz)*(1+4+3*8) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1084 |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1085 buf := bytes.NewBuffer(make([]byte, 0, size)) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1086 |
2471
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
1087 binary.Write(buf, binary.LittleEndian, wkb.NDR) |
63475c8e710e
Moved WKB constants to own package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2466
diff
changeset
|
1088 binary.Write(buf, binary.LittleEndian, wkb.MultiPointZ) |
959
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1089 binary.Write(buf, binary.LittleEndian, uint32(len(mpz))) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1090 |
2472
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1091 perPoint := bytes.NewBuffer(make([]byte, 0, 1+4)) |
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1092 binary.Write(perPoint, binary.LittleEndian, wkb.NDR) |
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1093 binary.Write(perPoint, binary.LittleEndian, wkb.PointZ) |
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1094 hdr := perPoint.Bytes() |
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1095 |
959
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1096 for _, p := range mpz { |
2472
db0e4ab57977
Turn new point cloud into WKB form of MultiPointZ.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2471
diff
changeset
|
1097 buf.Write(hdr) |
959
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1098 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.X)) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1099 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Y)) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1100 binary.Write(buf, binary.LittleEndian, math.Float64bits(p.Z)) |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1101 } |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1102 |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1103 return buf.Bytes() |
6ab012d0f0c2
Started with writing an importer job for sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
940
diff
changeset
|
1104 } |
2529
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1105 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1106 func (mpz *MultiPointZ) FromWKB(data []byte) error { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1107 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1108 r := bytes.NewReader(data) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1109 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1110 endian, err := r.ReadByte() |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1111 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1112 var order binary.ByteOrder |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1113 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1114 switch { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1115 case err != nil: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1116 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1117 case endian == wkb.NDR: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1118 order = binary.LittleEndian |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1119 case endian == wkb.XDR: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1120 order = binary.BigEndian |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1121 default: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1122 return fmt.Errorf("unknown byte order %x", endian) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1123 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1124 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1125 var geomType uint32 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1126 err = binary.Read(r, order, &geomType) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1127 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1128 switch { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1129 case err != nil: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1130 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1131 case geomType != wkb.MultiPointZ: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1132 return fmt.Errorf("unknown geometry type %x", geomType) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1133 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1134 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1135 var numPoints uint32 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1136 if err := binary.Read(r, order, &numPoints); err != nil { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1137 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1138 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1139 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1140 points := make(MultiPointZ, numPoints) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1141 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1142 for i := range points { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1143 endian, err = r.ReadByte() |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1144 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1145 switch { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1146 case err != nil: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1147 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1148 case endian == wkb.NDR: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1149 order = binary.LittleEndian |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1150 case endian == wkb.XDR: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1151 order = binary.BigEndian |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1152 default: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1153 return fmt.Errorf("unknown byte order %x", endian) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1154 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1155 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1156 err = binary.Read(r, order, &geomType) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1157 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1158 switch { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1159 case err != nil: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1160 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1161 case geomType != wkb.PointZ: |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1162 return fmt.Errorf("unknown geometry type %x", geomType) |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1163 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1164 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1165 var x, y, z uint64 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1166 if err = binary.Read(r, order, &x); err != nil { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1167 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1168 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1169 if err = binary.Read(r, order, &y); err != nil { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1170 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1171 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1172 if err = binary.Read(r, order, &z); err != nil { |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1173 return err |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1174 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1175 points[i] = Vertex{ |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1176 X: math.Float64frombits(x), |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1177 Y: math.Float64frombits(y), |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1178 Z: math.Float64frombits(z), |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1179 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1180 } |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1181 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1182 *mpz = points |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1183 |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1184 return nil |
45d51a49f191
SR import: Use own triangulation and clipping when importing sounding results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2512
diff
changeset
|
1185 } |