//todo: not working correct. Very slow /// <summary> /// Performs a linear search. /// </summary> /// <param name="center">Center point</param> /// <param name="radius">Radius to find neighbours within</param> public LinkedList <TValue> LinearSearch(TKey[] center, TKey[] radius) { var extendedCenter = new TKey[center.Length]; for (int i = 0; i < center.Length; i++) { extendedCenter[i] = typeMath.Add(center[i], radius[i]); } //var prevDistance = new TKey[center.Length]; //for (int i = 0; i < center.Length; i++) // prevDistance[i] = typeMath.PositiveInfinity; var prevDistance = new Stack <TKey> [center.Length]; var wasLess = new Stack <bool> [center.Length]; for (int i = 0; i < center.Length; i++) { prevDistance[i] = new Stack <TKey>(); prevDistance[i].Push(typeMath.PositiveInfinity); wasLess[i] = new Stack <bool>(); wasLess[i].Push(false); } LinkedList <TValue> nearestNeighbours = new LinkedList <TValue>(); AddNearestNeighbours(root, extendedCenter, 0, prevDistance, nearestNeighbours, wasLess); return(nearestNeighbours); }
private TKey DistanceSquaredBetweenPoints(TKey[] a, TKey[] b) { TKey distance = typeMath.Zero; // Return the absolute distance bewteen 2 hyper points for (var dimension = 0; dimension < dimensions; dimension++) { TKey distOnThisAxis = typeMath.Subtract(a[dimension], b[dimension]); TKey distOnThisAxisSquared = typeMath.Multiply(distOnThisAxis, distOnThisAxis); distance = typeMath.Add(distance, distOnThisAxisSquared); } return(distance); }