github.com/gopherd/gonum@v0.0.4/spatial/vptree/vptree_simple_example_test.go (about) 1 // Copyright ©2019 The Gonum Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package vptree_test 6 7 import ( 8 "fmt" 9 "log" 10 11 "github.com/gopherd/gonum/spatial/vptree" 12 ) 13 14 func ExampleTree() { 15 // Example data from https://en.wikipedia.org/wiki/K-d_tree 16 points := []vptree.Comparable{ 17 vptree.Point{2, 3}, 18 vptree.Point{5, 4}, 19 vptree.Point{9, 6}, 20 vptree.Point{4, 7}, 21 vptree.Point{8, 1}, 22 vptree.Point{7, 2}, 23 } 24 25 t, err := vptree.New(points, 3, nil) 26 if err != nil { 27 log.Fatal(err) 28 } 29 q := vptree.Point{8, 7} 30 p, d := t.Nearest(q) 31 fmt.Printf("%v is closest point to %v, d=%f\n", p, q, d) 32 // Output: 33 // [9 6] is closest point to [8 7], d=1.414214 34 } 35 36 func ExampleTree_Do() { 37 // Example data from https://en.wikipedia.org/wiki/K-d_tree 38 points := []vptree.Comparable{ 39 vptree.Point{2, 3}, 40 vptree.Point{5, 4}, 41 vptree.Point{9, 6}, 42 vptree.Point{4, 7}, 43 vptree.Point{8, 1}, 44 vptree.Point{7, 2}, 45 } 46 47 // Print all points in the data set within 3 of (3, 5). 48 t, err := vptree.New(points, 0, nil) 49 if err != nil { 50 log.Fatal(err) 51 } 52 q := vptree.Point{3, 5} 53 t.Do(func(c vptree.Comparable, _ int) (done bool) { 54 // Compare each distance and output points 55 // with a Euclidean distance less than or 56 // equal to 3. Distance returns the 57 // Euclidean distance between points. 58 if q.Distance(c) <= 3 { 59 fmt.Println(c) 60 } 61 return 62 }) 63 // Unordered output: 64 // [2 3] 65 // [4 7] 66 // [5 4] 67 }