Find the fewest line segments through 2D list of points

I am looking for a general software algorithm (preferably C#) to find the minimum number of straight line segments from a 2 dimensional list (array) of points (doubles).

The algorithm shall return a list of line segment objects, each object comprised of all of the points along that segment, ordered by the direction we are traversing. The algorithm must also dynamically select the starting point, and determine the most efficient path through all points from the array.

This doesn't seem to be the "Traveling Salesman" scenario, since we are looking for straight lines (rather than a "spline" type of algorithm).

Examples of patterns are attached:

Example Pattern 1 Example Pattern 2