| Node of float * Tree<'a> * Tree<'a>
| Leaf of 'a
- static member buildTree (l: 'a list) : Tree<'a> =
+ static member BuildTree (l: 'a list) : Tree<'a> =
let xSorted = List.toArray l
let ySorted = List.toArray l
Array.sortInPlaceWith cmpX xSorted
buildTreeFromSortedArray xSorted ySorted 1
- static member search (tree: Tree<'a>) (searchRegion: Region) : 'a list =
+ member this.Search (searchRegion: Region) : 'a list =
let rec valuesFrom (tree: Tree<'a>) : 'a list =
match tree with
| Leaf v -> [v]
let upRegion = { currentRegion with minY = splitValue }
(valuesInRegion downRegion part1) @ (valuesInRegion upRegion part2)
- searchWithRegion tree { minX = Double.MinValue; maxX = Double.MaxValue; minY = Double.MinValue; maxY = Double.MaxValue } 1
+ searchWithRegion this { minX = Double.MinValue; maxX = Double.MaxValue; minY = Double.MinValue; maxY = Double.MaxValue } 1
///// Tests. TODO: to put in a unit test.
Point(3.5, 1.5)
Point(2.5, 0.5) ]
- let tree = Tree.buildTree pts
+ let tree = Tree.BuildTree pts
Utils.dprintfn "Tree: %A" tree
- let s1 = Tree.search tree { minX = 0.0; maxX = 5.0; minY = 0.0; maxY = 5.0 } // All points.
+ let s1 = tree.Search { minX = 0.0; maxX = 5.0; minY = 0.0; maxY = 5.0 } // All points.
Utils.dprintfn "s1: %A" s1
- let s2 = Tree.search tree { minX = 2.8; maxX = 4.5; minY = 3.0; maxY = 4.5 }
+ let s2 = tree.Search { minX = 2.8; maxX = 4.5; minY = 3.0; maxY = 4.5 }
Utils.dprintfn "s2: %A" s2
- let s3 = Tree.search tree { minX = 2.0; maxX = 2.0; minY = 2.0; maxY = 2.0 }
+ let s3 = tree.Search { minX = 2.0; maxX = 2.0; minY = 2.0; maxY = 2.0 }
Utils.dprintfn "s3: %A" s3
let test2 () =
Point(1.0, 2.0)
Point(1.0, 3.0) ]
- let tree = Tree.buildTree pts
+ let tree = Tree.BuildTree pts
Utils.dprintfn "Tree: %A" tree
- let s1 = Tree.search tree { minX = 1.0; maxX = 1.0; minY = 1.0; maxY = 1.0 }
+ let s1 = tree.Search { minX = 1.0; maxX = 1.0; minY = 1.0; maxY = 1.0 }
Utils.dprintfn "s1: %A" s1
- let s2 = Tree.search tree { minX = 1.0; maxX = 1.0; minY = 2.0; maxY = 2.0 }
+ let s2 = tree.Search { minX = 1.0; maxX = 1.0; minY = 2.0; maxY = 2.0 }
Utils.dprintfn "s2: %A" s2
// This case result is wrong: FIXME
- let s3 = Tree.search tree { minX = 1.0; maxX = 1.0; minY = 3.0; maxY = 3.0 }
+ let s3 = tree.Search { minX = 1.0; maxX = 1.0; minY = 3.0; maxY = 3.0 }
Utils.dprintfn "s3: %A" s3
- let s4 = Tree.search tree { minX = 0.0; maxX = 2.0; minY = 0.0; maxY = 4.0 }
+ let s4 = tree.Search { minX = 0.0; maxX = 2.0; minY = 0.0; maxY = 4.0 }
Utils.dprintfn "s4: %A" s4