Инерционные характеристики модели
Для передачи инерционных характеристик модели используется класс InertiaProperties, который приведен на рис. 1:
Рис. 1
Класс InertiaProperties объявлен в файле mip_solid_mass_inertia.h. Класс InertiaProperties содержит следующие данные о модели:
double area – площадь поверхности,
double volume – объем,
double mass – масса,
double inertia[3] – статические моменты в исходной системе координат,
double initial[3][3] – моменты инерции в исходной системе координат,
double moments[3][3] – моменты инерции в центральной системе координат,
double general[3] – главные центральные моменты инерции,
MbCartPoint3D center – центр масс,
MbVector3D direction[3] – векторы направлений главных осей инерции.
При инициализации класса InertiaProperties все данные принимают нулевые значения, а координаты центра масс полагаются равными NOT_INITIAL_DBL. Моменты инерции initial вычисляются в системе координат, в которой описана модель. Моменты инерции moments вычисляются в системе координат, начало которой находится в точке center, а координатные оси совпадают с осями исходной системы координат, в которой описана модель. Моменты инерции general вычисляются в главной центральной системе координат, начало которой находится в точке center, а координатные оси получены вычислением и совпадают с главными осями инерции модели. Центробежные моменты инерции в главных системах координат отсутствуют.
Векторы direction дают направления главных осей инерции. Если все главные моменты инерции general[i], i = 1, 2, 3, разные, то все векторы direction[i], i = 1, 2, 3, не равны нулю. Если все главные моменты инерции general[i], i = 1, 2, 3, одинаковые, то все векторы direction[i], i = 1, 2, 3, равны нулю, и главными направлениями могут служить любые три взаимно ортогональных вектора. Если два из трех главных моментов инерции равны, например general[j] == general[k], то два из трех векторов равны нулю direction[j] = direction[k] = 0, а не равный нулю вектор direction[i] определяет направление главной оси инерции, момент относительно которой отличается от других; двумя другими главными направлениями могут служить любые два взаимно ортогональных и ортогональных не равному нулю вектору direction[i] вектора.
Возможность использования готовых данных для отдельных элементов модели позволяют реализовать классы SolidMIAttire и AssemblyMIAttire, которые приведены на рис. 2 и рис. 3. Классы объявлены в файле mip_solid_mass_inertia.h.
Рис. 2
Рис. 3
Класс SolidMIAttire содержит следующие данные:
const MbSolid & solid – тело,
double density – плотность или удельная масса на единицу площади,
MbMatrix3D matrix – матрица преобразования тела в систему ближайшей сборки,
InertiaProperties * properties – назначенные инерционные характеристики тела, могут быть ноль или заданы не полностью,
bool ready – признак, показывающий, что характеристики не требуется считать.
Класс AssemblyMIAttire содержит следующие данные:
RPArray< AssemblyMIAttire > assemblies – множество сборочных единиц следующего уровня,
RPArray< SolidMIAttire > solids – тела сборочной единицы,
MbMatrix3D matrix – матрица преобразования сборочной единицы в систему ближайшей сборки,
InertiaProperties * properties – назначенные инерционные характеристики сборочной единицы, могут быть нулями или заданы не полностью,
bool ready – признак, показывающий, что характеристики не требуется считать.
Если экземпляры классов SolidMIAttire и AssemblyMIAttire содержат не нулевые properties и ready == true, то инерционные характеристики соответствующего объекта не будут вычисляться, а результат вычисления будет содержать данные из properties.
Если экземпляры классов SolidMIAttire и AssemblyMIAttire содержат не нулевые properties и ready == false, то результат вычисления будет содержать данные из properties, которые не равны NULL_EPSILON или NOT_INITIAL_DBL. Данные, которые в properties равны NULL_EPSILON или NOT_INITIAL_DBL, будут вычислены. Рассматриваемые классы позволяют смешивать рассчитанные данные с назначенными.