public IList<Point> Filter(IList<Point> points)
{
IList<Point> result = new List<Point>();
if (points.Count == 0)
{
return result;
}
var point = new Point(points.First());
result.Add(point);
foreach (var currentSourcePoint in points.Skip(1))
{
if (!this.DistanceIsTooSmall(currentSourcePoint, point))
{
point = new Point(currentSourcePoint);
result.Add(point);
}
}
if (this.checkBoundary && result.Count > 1)
{
CheckFirstAndLastPoint(result);
}
return result;
}