C3D Toolkit
Kernel - 105435, Vision - 121811.105435
|
Инерционные характеристики тела. Подробнее...
#include <mip_solid_mass_inertia.h>
Открытые члены | |
InertiaProperties () | |
Конструктор. Подробнее... | |
InertiaProperties (const InertiaProperties &other) | |
Конструктор копирования. | |
~InertiaProperties () | |
Деструктор. | |
void | Init () |
Инициализация. Подробнее... | |
bool | CheckData () |
Проверить данные. Подробнее... | |
void | CalculateIntegrals (const RPArray< MbFace > &faces, bool closed, double density, double deviateAngle, IfProgressIndicator *progress) |
Определить массо-центровочных характеристики. Подробнее... | |
void | CalculateProperties (const RPArray< MbFace > &faces, bool closed, double density, bool calculateAll, double deviateAngle, IfProgressIndicator *progress) |
Определить масс-центровочных характеристики. Подробнее... | |
void | CalculateIntegrals (const MbMesh &mesh, double density) |
Определить масс-центровочных характеристики. Подробнее... | |
void | CalculateProperties (const MbMesh &mesh, double density, bool calculateAll) |
Определить масс-центровочных характеристики. Подробнее... | |
void | GetIntegrals (const InertiaProperties &etalon) |
Вычислить интегралы инерции. Подробнее... | |
void | CrossIntegrals (const InertiaProperties &prop) |
Учесть частично заданных характеристик. Подробнее... | |
bool | Calculate () |
Рассчитать главную центральную систему. Подробнее... | |
bool | CalculateCenter () |
Рассчитать центр масс и центральные моменты инерции. Подробнее... | |
bool | CalculateGeneral () |
Рассчитать главные центральные моменты инерции. Подробнее... | |
void | Transform (const MbMatrix3D &m) |
Трансформировать. Подробнее... | |
void | IntegralsTransform (const MbMatrix3D &m) |
Трансформировать. Подробнее... | |
void | Add (const InertiaProperties &) |
Добавить к полям объекта полей другого объекта. | |
void | ChangeDensity (double density) |
Изменить плотность. | |
bool | IsSame (const InertiaProperties &other, double accuracy) const |
Являются ли объекты равными? | |
void | operator= (const InertiaProperties &) |
Оператор присваивания. | |
Открытые атрибуты | |
double | area |
Площадь поверхности. | |
double | volume |
Объем. | |
double | mass |
Масса. | |
double | inertia [c3d::SPACE_DIM] |
Статические моменты. | |
double | initial [c3d::SPACE_DIM][c3d::SPACE_DIM] |
Моменты инерции относительно исходных осей координат. | |
double | moments [c3d::SPACE_DIM][c3d::SPACE_DIM] |
Моменты инерции относительно центральных осей координат. | |
double | general [c3d::SPACE_DIM] |
Главные центральные моменты инерции. | |
MbCartPoint3D | center |
Центр тяжести. | |
MbVector3D | direction [c3d::SPACE_DIM] |
Векторы направлений главных центральных осей инерции. | |
Инерционные характеристики тела.
Инерционные характеристики тела.
Векторы 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] определяет направление главной оси инерции, момент general[i] относительно которой отличается от других, двумя другими главными направлениями могут служить любые два взаимно ортогональных и ортогональных не равному нулю вектору direction[i] вектора.
|
inline |
Конструктор.
Конструктор инерционных характеристик с умолчательными значениями полей.
Умолчательные значения означают, что параметры не заданы.
void InertiaProperties::Init | ( | ) |
Инициализация.
Инициализация инерционных характеристик умолчательными значениями полей.
Умолчательные значения означают, что параметры не заданы.
bool InertiaProperties::CheckData | ( | ) |
Проверить данные.
Проверить данные на корректность.
void InertiaProperties::CalculateIntegrals | ( | const RPArray< MbFace > & | faces, |
bool | closed, | ||
double | density, | ||
double | deviateAngle, | ||
IfProgressIndicator * | progress | ||
) |
Определить массо-центровочных характеристики.
Определить массо-центровочных характеристики набора граней.
Каждое тело представлено совокупностью граней, описывающих его поверхность. Определение объёма, центра масс и моментов инерции тела приводит к вычислению объёмных интегралов. С помощью формулы Остроградского-Гаусса интегралы по объёму тела сводятся к интегралам по поверхностям граней тела.
При численном интегрировании по поверхности область определения параметров грани разбивается на небольшие четырёхугольные или треугольные подобласти. От размеров подобластей зависит точность вычисления. В качестве управляющего параметра разбиения области интегрирования используется угловое отклонение нормали поверхности в подобласти deviateAngle. Размер каждой подобласти определён условием: угловое изменение нормали поверхности в подобласти не должно превышать deviateAngle.
Для четырёхугольных подобластей по каждому параметру поверхности интегрирование выполняется с помощью квадратурных формул Гаусса. Для треугольных областей удобно перейти от координат u и v к трём барицентрическим координатам a, b, c, построенным по точкам pa, pb, pc. Координаты произвольной точки p=(u,v) через барицентрические координаты a, b, c выражаются с помощью формул
u = a ua + b ub + c uc,
v = a va + b vb + c vc.
Барицентрические координаты удовлетворяют равенству: a + b + c = 1.
Во всех случаях каждый поверхностный интеграл вычисляется как взвешенная сумма значений интегрируемой функции внутри области интегрирования. Для каждого отдельного тела расчёт выполняется в местной системе координат. Затем характеристики тела переводятся в глобальную систему координат и суммируются. Результатом являются характеристики сборки тел в глобальной, центральной и главной центральной системе координат.
[in] | faces | - Набор граней. |
[in] | closed | - Замкнутость набора граней. |
[in] | density | - Плотность (closed == true) или удельная масса на единицу площади (closed == false). |
[in] | deviateAngle | - Параметр управления точностью расчёта - угловое отклонение нормпли поверхности или касательных кривой на участке численного интегрирования. |
[in] | progress | - Индикатор прогресса выполнения. |
void InertiaProperties::CalculateProperties | ( | const RPArray< MbFace > & | faces, |
bool | closed, | ||
double | density, | ||
bool | calculateAll, | ||
double | deviateAngle, | ||
IfProgressIndicator * | progress | ||
) |
Определить масс-центровочных характеристики.
Определить масс-центровочных характеристики набора граней.
[in] | faces | - Набор граней. |
[in] | closed | - Замкнутость набора граней. |
[in] | density | - Плотность (closed == true) или удельная масса на единицу площади (closed == false). |
[in] | calculateAll | - Если false, проводится расчет интегралов инерции, если true, то еще проводится расчет центра масс, центральных моментов инерции, главных центральных моментов инерции. |
[in] | deviateAngle | - Параметр управления точностью расчёта - угловое отклонение нормали поверхности или касательных кривой на участке численного интегрирования. |
[in] | progress | - Индикатор прогресса выполнения. |
void InertiaProperties::CalculateIntegrals | ( | const MbMesh & | mesh, |
double | density | ||
) |
Определить масс-центровочных характеристики.
Определить масс-центровочных характеристики полигонального объекта.
[in] | mesh | - Полигональный объект. |
[in] | density | - Плотность (closed == true) или удельная масса на единицу площади (closed == false). |
void InertiaProperties::CalculateProperties | ( | const MbMesh & | mesh, |
double | density, | ||
bool | calculateAll | ||
) |
Определить масс-центровочных характеристики.
Определить масс-центровочных характеристики полигонального объекта.
[in] | mesh | - Полигональный объект. |
[in] | density | - Плотность или удельная масса на единицу площади. |
[in] | calculateAll | - Если false, проводится расчет интегралов инерции, если true, то еще проводится расчет центра масс, центральных моментов инерции, главных центральных моментов инерции. |
void InertiaProperties::GetIntegrals | ( | const InertiaProperties & | etalon | ) |
Вычислить интегралы инерции.
Вычислить интегралы инерции по заданным пользователем моментам инерции.
Присваивает себе значение площади, объема, массы, центра масс эталона, пересчитывает моменты инерции относительно центральных осей координат по заданным моментам инерции эталона.
[in] | etalon | - Эталон. |
void InertiaProperties::CrossIntegrals | ( | const InertiaProperties & | prop | ) |
Учесть частично заданных характеристик.
Пересчитать интегралы инерции с учётом частично заданных пользователем моментов инерции.
Присваивает себе значение площади, объема, массы, центра масс эталона, моментов инерции, если эти величины у эталона заданы.
Площадь, объем, масса, центр масс, моменты инерции объекта не изменяются, если соответствующая величина у эталона не задана.
[in] | prop | - Частично заданные инерционные характеристики. |
bool InertiaProperties::Calculate | ( | ) |
Рассчитать главную центральную систему.
Расчёт главной центральной системы координат и проверка.
Входит: расчет центра масс и центральных моментов инерции, расчет главных центральных моментов инерции.
bool InertiaProperties::CalculateCenter | ( | ) |
Рассчитать центр масс и центральные моменты инерции.
Рассчитать центр масс и центральные моменты инерции.
bool InertiaProperties::CalculateGeneral | ( | ) |
Рассчитать главные центральные моменты инерции.
Рассчитать главные центральные моменты инерции.
void InertiaProperties::Transform | ( | const MbMatrix3D & | m | ) |
Трансформировать.
Трансформировать данные по матрице.
[in] | m | - Матрица трансформации. |
void InertiaProperties::IntegralsTransform | ( | const MbMatrix3D & | m | ) |
Трансформировать.
Трансформировать интегралы инерции в соответствии с матрицей.
[in] | m | - Матрица трансформации. |