public IEnumerable<Point> Connect(Point start, Point finish)
 {
     if (Math.Abs(finish.X - start.X) < 1e-6)
     {
         return new[] {start, finish};
     }
     if (finish.X < start.X)
     {
         return Connect(finish, start).Reverse();
     }
     var catenary = Catenary.FromLength(
         start.X, Sign * start.Y,
         finish.X, Sign * finish.Y, 
         Length);
     var connection = new PointConnection(x => new Point(x, catenary.GetValue(x)), PointCount);
     return connection.Connect(start.X, finish.X)
         .Select(point => new Point(point.X, Sign * point.Y));
 }