changeset 2513:1534df518201 octree-diff

Called STT tree building.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 05 Mar 2019 15:00:42 +0100
parents 2768f74d54ab
children 6bcaa8bf2603
files cmd/octreediff/main.go pkg/octree/strtree.go
diffstat 2 files changed, 31 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/cmd/octreediff/main.go	Tue Mar 05 13:05:50 2019 +0100
+++ b/cmd/octreediff/main.go	Tue Mar 05 15:00:42 2019 +0100
@@ -393,6 +393,14 @@
 		log.Printf("triangulation took %v\n", now.Sub(last))
 		last = now
 
+		var str octree.STRTree
+
+		str.Build(tri)
+
+		now = time.Now()
+		log.Printf("building STR tree took %v\n", now.Sub(last))
+		last = now
+
 		builder := octree.NewBuilder(tri.Tin())
 		builder.Build()
 
--- a/pkg/octree/strtree.go	Tue Mar 05 13:05:50 2019 +0100
+++ b/pkg/octree/strtree.go	Tue Mar 05 15:00:42 2019 +0100
@@ -59,12 +59,16 @@
 	sm := S * numEntries
 
 	slices := make([][]int32, S)
+	rest := items
 	for i := range slices {
-		end := (i + 1) * sm
-		if end > len(items) {
-			end = len(items)
+		var n int
+		if len(rest) < sm {
+			n = len(rest)
+		} else {
+			n = sm
 		}
-		slices[i] = items[i*sm : end]
+		slices[i] = rest[:n]
+		rest = rest[n:]
 	}
 
 	leaves := make([]int32, 0, S*S)
@@ -114,12 +118,23 @@
 	sm := S * numEntries
 
 	slices := make([][]int32, S)
+	/*
+		log.Printf("S: %d\n", S)
+		log.Printf("SM: %d\n", sm)
+		log.Printf("S * SM: %d\n", S*sm)
+		log.Printf("N: %d\n", len(items))
+	*/
+
+	rest := items
 	for i := range slices {
-		end := (i + 1) * sm
-		if end > len(items) {
-			end = len(items)
+		var n int
+		if len(rest) < sm {
+			n = len(rest)
+		} else {
+			n = sm
 		}
-		slices[i] = items[i*sm : end]
+		slices[i] = rest[:n]
+		rest = rest[n:]
 	}
 
 	nodes := make([]int32, 0, S*S)