Вычисление моментов в пространстве

Моменты в пространстве можно вычислять относительно точек, прямых или плоскостей. В данном разделе будут рассматриваться моменты относительно плоскостей. Моментом первого порядка множества точек называется сумма произведений расстояний точек до плоскости на массу точки. Расстояние берётся со знаком ( положительные и отрицательные полупространства ). В том случае, когда знак не учитывается момент называется абсолютным. Если множество точек непрерывно, то сумма заменяется на интегрирование.
Центр масс точек можно определить, как вектор у которого каждая компонента равна моменту первого порядка относительно соответствующей координатной плоскости. Имеются следующие функции вычисляющие центры масс - у множества точек ( с одинаковой массой и с заданной ), у множества отрезков ( с одинаковой плотностью ), у заданной грани многогранника и у самого многогранника ( с равномерной плотностью ):

typedef unsigned int nat;

Def<Vector3d> centerOfMass ( CArrRef<Vector3d> point ); // Центр масс набора точек

Def<Vector3d> centerOfMass ( CArrRef<Vector3d> point, CArrRef<double> mass ); // то же с весами

Def<Vector3d> centerOfMass ( CArrRef<Segment3d> segm ); // Центр масс набора отрезков

Def<Vector3d> centerOfMass ( nat i, const Polyhedron & poly ); // Центр масс i-той грани

Def<Vector3d> centerOfMass ( const Facet & facet, CArrRef<Vector3d> vert ); // Центр масс грани

Def<Vector3d> centerOfMass ( const Polyhedron & poly ); // Центр масс многогранника

У всех функций результат не вычисляется в случае, когда сумма масс равна нулю.

Моментом второго порядка множества точек называется сумма произведений квадратов расстояний точек до плоскости на массу точки:

double momentum2pnt ( CArrRef<Vector3d> point, const Plane3d & plane );

double momentum2pnt ( CArrRef<Vector3d> point, CArrRef<double> mass, const Plane3d & plane );

double momentum2sgm ( CArrRef<Segment3d> segm, const Plane3d & plane );

double momentum2fct ( nat i, const Polyhedron & poly, const Plane3d & plane );

double momentum2plh ( const Polyhedron & poly, const Plane & plane );
Следующие функции вычисляют основные моменты второго порядка и нормали плоскостей проходящих через центр масс, которые всегда взаимно-ортогональны:

struct Mom3d
{
    double minMom, midMom, maxMom;
    Vector3d minNorm, midNorm, maxNorm;
    Vector3d o;
};

Def<Mom3d> momentum2pnt ( CArrRef<Vector3d> point );

Def<Mom3d> momentum2pnt ( CArrRef<Vector3d> point, CArrRef<double> mass );

Def<Mom3d> momentum2sgm ( CArrRef<Segment3d> segm );

Def<Mom3d> momentum2fct ( nat i, const Polyhedron & poly );

Def<Mom3d> momentum2plh ( const Polyhedron & poly );

Выходные параметры для всех функций: o - это центр масс, minMom ( минимальный момент 2-го порядка ), minNorm ( направление нормали минимального момента ), midMom ( средний момент 2-го порядка ), midNorm ( направление нормали среднего момента ), maxMom ( максимальный момент 2-го порядка ), maxNorm ( направление нормали максимального момента ).

Функция getEllipsoid вычисляет параметры эллипсоида по моментам 2-го порядка:
Def<Ellipsoid3d> getEllipsoid ( const Def<Mom3d> & mom );
Функция getCuboid вычисляет параметры параллелепипеда по моментам 2-го порядка:
Def<Cuboid3d> getCuboid ( const Def<Mom3d> & mom );

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

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

Наверх