rot90[{x_, y_}] := {-y, x}
dist[a_, b_, pt_] :=
With[{v = Normalize@rot90[b - a]}, Abs[(pt - b).v]]
ClearAll[downsample]
downsample[points_?MatrixQ, eps_] :=
With[{a = First[points], b = Last[points]},
Module[{mid, distances},
distances = dist[a, b, #] & /@ points;
mid = First@Ordering[distances, -1];
If[distances[[mid]] < eps, {a, b},
Join[downsample[points[[;; mid]], eps],
Rest@downsample[points[[mid ;;]], eps]]]
]
]
downsample[points : {a_, b_}, _] := points