Пусть задано множество точек или отрезков и нужно провести наиболее близкую к ним прямую ( аппроксимация прямой ). Такой прямой может быть прямая, которая минимизирует сумму квадратов расстояний до прямой ( момент 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 ); В случае невозможности вычисления возвращаемого объекта поле isDef равно false. Следующая функция находит плоскость минимизирующую максимальное расстояние до точек ( бесконечную норму вектора отклонений ): Plane3d getPlaneU ( CArrRef<Vector3d> point, double & r );Описание класса Vector3d находится здесь. Описание классов Segment3d, Line3d и Plane3d находится здесь. Описание шаблона классов CArrRef находится здесь. Описание шаблона классов Def находится здесь. Исходники находятся в файле approx3d.cpp Наверх |