Линейная аппроксимация точек в пространстве

Пусть задано множество точек или отрезков и нужно провести наиболее близкую к ним прямую ( аппроксимация прямой ). Такой прямой может быть прямая, которая минимизирует сумму квадратов расстояний до прямой ( момент 2-го порядка ):

Def<Line3d> getLine2 ( CArrRef<Vector3d> point );

Def<Line3d> getLine2 ( CArrRef<Vector3d> point, CArrRef<double> mass );

Def<Line3d> getLine2 ( CArrRef<Segment3d> segm );
или, которая минимизирует максимальное расстояние до прямой ( r ):
Def<Line3d> getLineU ( CArrRef<Vector3d> point, double & r );

Следующие функции находят такую аппроксимирующую плоскостью, которая минимизирует сумму квадратов расстояний до плоскости ( момент 2-го порядка ):

Def<Plane3d> getPlane2 ( CArrRef<Vector3d> point );

Def<Plane3d> getPlane2 ( CArrRef<Vector3d> point, CArrRef<double> mass );

Def<Plane3d> getPlane2 ( CArrRef<Segment3d> segm );

Следующая функция находит плоскость минимизирующую максимальное расстояние до точек ( бесконечную норму вектора отклонений ) при помощи алгоритма minConvexPolyhedronDiameter:

Def<Plane3d> getPlaneU ( CArrRef<Vector3d> point );

Во всех функциях в случае невозможности вычисления возвращаемого объекта поле isDef равно false.

Описание класса Vector3d находится здесь.
Описание классов Segment3d, Line3d и Plane3d находится здесь.
Описание шаблона классов CArrRef находится здесь.
Описание шаблона классов Def находится здесь.

Исходники находятся в файле approx3d.cpp

Наверх