# HG changeset patch # User Sascha L. Teichmann # Date 1551794442 -3600 # Node ID 1534df518201efa37cdc347378cd223290aafb7c # Parent 2768f74d54ab22ee0da5c9c504b2fcef87ef9e03 Called STT tree building. diff -r 2768f74d54ab -r 1534df518201 cmd/octreediff/main.go --- 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() diff -r 2768f74d54ab -r 1534df518201 pkg/octree/strtree.go --- 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)