X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemiaCore%2FKdTree.fs;h=3a6097773ec2ab6116f79c5e33257a22e83006b4;hp=94a3921e8bad8e36864ab8247b7a12b95c439533;hb=bb642da712542095d8c5ead2d0d036470eb040b9;hpb=4bfa3cbdc6145e6944f02e24829ab2ef3a851ac1 diff --git a/Parasitemia/ParasitemiaCore/KdTree.fs b/Parasitemia/ParasitemiaCore/KdTree.fs index 94a3921..3a60977 100644 --- a/Parasitemia/ParasitemiaCore/KdTree.fs +++ b/Parasitemia/ParasitemiaCore/KdTree.fs @@ -65,10 +65,10 @@ type Tree<'a when 'a :> I2DCoords> = buildTreeFromSortedArray xSorted ySorted 1 member this.Search (searchRegion: Region) : 'a list = - let rec valuesFrom (tree: Tree<'a>) : 'a list = + let rec valuesFrom (tree: Tree<'a>) (acc: 'a list) : 'a list = match tree with - | Leaf v -> [v] - | Node (_, part1, part2) -> (valuesFrom part1) @ (valuesFrom part2) + | Node (_, left, right) -> (valuesFrom right (valuesFrom left acc)) + | Leaf v -> v :: acc let rec searchWithRegion (tree: Tree<'a>) (currentRegion: Region) (depth: int) : 'a list = match tree with @@ -77,7 +77,7 @@ type Tree<'a when 'a :> I2DCoords> = let valuesInRegion (region: Region) (treeRegion: Tree<'a>) = if region.IsSub searchRegion then - valuesFrom treeRegion + valuesFrom treeRegion [] elif region.Intersects searchRegion then searchWithRegion treeRegion region (depth + 1)