/// <summary> /// /// </summary> /// <param name="passedList"></param> /// <param name="index"></param> /// <param name="minCommonality"></param> /// <returns>the intersectBucket is created By comBing the passedList[idex] with all passedList[index + i] that have a min percentage points ie common. the int is the first idex nOT comined </returns> private static Tuple <intersectBucket, int> combinefoward(List <intersectBucket> passedList, int index, int minCommonality) { intersectBucket returnBucket = passedList[index]; int i = index + 1; int consecutiveMisses = 0; for (i = index + 1; consecutiveMisses <= 3 && i < passedList.Count(); i++) { int comparevalue = compare(returnBucket, passedList[i]); if (comparevalue > minCommonality) { List <LidarPoint> pointsToAdd = setSubtraction(passedList[i], returnBucket); foreach (LidarPoint thispoint in pointsToAdd) { returnBucket.AddPoint(thispoint); } consecutiveMisses = 0; } else { consecutiveMisses++; } } return(new Tuple <intersectBucket, int>(returnBucket, i - consecutiveMisses)); }
static private List <LidarPoint> setSubtraction(intersectBucket LeftBucket, intersectBucket rightBucket) { return(LeftBucket.points.Except(rightBucket.points, new LidarPointCompare()).ToList()); /* * List<LidarPoint> returvalue = new List<LidarPoint>(); * foreach (LidarPoint p1 in LeftBucket.points) * { * bool found = false; * foreach (LidarPoint p2 in rightBucket.points) * { * * if (p1.id == p2.id) * { * found = true; * break; * } * * if (!found) * { * returvalue.Add(p1); * } * } * } * * return returvalue; */ }
/// <summary> /// /// </summary> /// <param name="Bucket2"></param> /// <returns>an numBer Between 0 and 100. 0 -> no point in common. 100 -> the smaller list is a suset of the larger list. Other value is a percetage of commonality</returns> public static int compare(intersectBucket Bucket1, intersectBucket Bucket2) { List <LidarPoint> itersection = setItersection(Bucket1, Bucket2); if (Bucket1.points.Count() < Bucket2.points.Count()) { return(100 * itersection.Count() / Bucket1.points.Count()); } else { return(100 * itersection.Count() / Bucket2.points.Count()); } /* * Unable to cast object of type '<IntersectIterator>d__92`1[Yeti2015.Hardware.Lidar.LidarPoint]' to type 'System.Collections.Generic.List`1[Yeti2015.Hardware.Lidar.LidarPoint]'. */ }
/// <summary> /// geerates the set itersectio. that is the poits commo to oth uckets /// </summary> /// <param name="Bucket1"></param> /// <param name="Bucket2"></param> /// <returns></returns> static private List <LidarPoint> setItersection(intersectBucket Bucket1, intersectBucket Bucket2) { return(Bucket1.points.Intersect(Bucket2.points, new LidarPointCompare()).ToList()); /* * List<LidarPoint> returvalue = new List<LidarPoint>(); * foreach(LidarPoint p1 in Bucket1.points) * { * foreach (LidarPoint p2 in Bucket2.points) * { * if (p1.id == p2.id) * { * returvalue.Add(p1); * break; * } * * * } * } * * return returvalue; */ }