Пусть задано дискретное множество точек на плоскости и надо найти прямую наиболее близкую к ним.
В качестве критерия близости будем рассматривать некоторую норму вектора расстояний от точек до прямой.
В этом случае нужно найти прямую, которая минимизирует выбранную норму.
Def<Line2d> getLine1 ( CArrRef<Vector2d> point ); Def<Line2d> getLine1 ( CArrRef<Vector2d> point, CArrRef<double> mass );Для 2-нормы это будет минимум сумма квадратов расстояний точек до прямой ( момент 2-го порядка ): Def<Line2d> getLine2 ( CArrRef<Vector2d> point ); Def<Line2d> getLine2 ( CArrRef<Vector2d> point, CArrRef<double> mass ); Временная сложность этих функций равна O ( n ). Для бесконечной нормы это будет минимакс расстояний от точек до прямой: Def<Line2d> getLineU ( CArrRef<Vector2d> point ); Робастный метод аппроксимации предназначен для данных с выбросами. Этот алгоритм также заполняет массив весов (mass) значениями от 0 до 1. Def<Line2d> getLineR ( CArrRef<Vector2d> point, ArrRef<double> mass ); Примеры использования этих функций можно посмотреть в приложении DEMO. Описание шаблона классов CArrRef находится здесь.
Исходники находятся в файле approx2d.cpp Наверх |