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