The main process is now complete.
[master-thesis.git] / Parasitemia / Parasitemia / KdTree.fs
index dd0247a..3e714ac 100644 (file)
@@ -39,7 +39,7 @@ type Tree<'a when 'a :> I2DCoords> =
     | 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
@@ -64,7 +64,7 @@ type Tree<'a when 'a :> I2DCoords> =
 
         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]
@@ -94,7 +94,7 @@ type Tree<'a when 'a :> I2DCoords> =
                     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.
@@ -118,16 +118,16 @@ let 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 () = 
@@ -136,19 +136,19 @@ 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