Учитывая набор из n линейных сегментов, причем i-й линейный сегмент простирается от точки (x0i, y0i) до (x1i, y1i):
Посмотрите на первый сегмент линии и посмотрите, ближе ли онвертикальный или горизонтальный.Если abs (y00-y10)> abs (x00-x10), установите флаг и поменяйте местами координаты x и y.Это предотвратит проблему бесконечного наклона.(Я думаю, у вас все еще может быть проблема, если два отрезка линии были перпендикулярны, но если ваши отрезки линии настолько разные, средняя линия не имеет большого значения.)
Используя все 2n конечных точек, вычислите наименьшееквадраты, подходящие к прямой линии
y = a * x + b
Для каждой конечной точки вычислите abs (a * xij + b - yij).Это измеряет расстояние, параллельное оси Y этой конечной точки до средней линии.Я думаю, что если это больше, чем какая-то сумма, вы можете отклонить этот отрезок и повторить подбор без него.Если оно меньше пары пикселей, вы можете заменить координату y на подобранную, чтобы переместить этот конец отрезка линии на подобранную линию.
Если установлен флаг обмена, то поменяйте местами x иy назад.