X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemia%2FKdTree.fs;h=3e714ac691720d207cf2d349bd99f22a683e4252;hp=dd0247ab029eda4592472247bc54aafcbb9a868e;hb=e76da913cd58078ad2479357b2430ed62a6e0777;hpb=d9a6e072ecf299db691c05bb559a71265f812ba3 diff --git a/Parasitemia/Parasitemia/KdTree.fs b/Parasitemia/Parasitemia/KdTree.fs index dd0247a..3e714ac 100644 --- a/Parasitemia/Parasitemia/KdTree.fs +++ b/Parasitemia/Parasitemia/KdTree.fs @@ -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