Mercurial > gemma
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)