C3D Toolkit
Kernel - 117936, Vision - 2.7.0.41
|
Расширенная матрица преобразования в трёхмерном пространстве. Подробнее...
#include <mb_matrix3d.h>
Открытые члены | |
MbMatrix3D () | |
Конструктор по умолчанию, определяет единичную матрицу. | |
MbMatrix3D (const MbMatrix3D &init) | |
Конструктор копирования. | |
MbMatrix3D (const MbPlacement3D &place) | |
Конструктор по локальной системе координат. | |
MbMatrix3D (const MbMatrix &m) | |
Конструктор по двумерной матрице. | |
MbMatrix3D (const MbMatrix3D &A, const MbMatrix3D &B) | |
Конструктор по двум матрицам. Подробнее... | |
~MbMatrix3D () | |
Деструктор. | |
void | MouldCavityScale (MbCartPoint3D &fixedPoint, double deltaX, double deltaY, double deltaZ) |
Получить матрицу для масштабирования каверны литейной формы. Подробнее... | |
bool | SetRoundedValue (bool total, double eps) |
Округлить с точностью до eps. Подробнее... | |
void | Normalize () |
Нормализовать. | |
bool | CalculateFixedPoint (MbCartPoint3D &fixedPoint) const |
Вычислить неподвижную точку преобразования. | |
void | GetProperties (MbProperties &) |
Выдать свойства объекта. | |
void | SetProperties (const MbProperties &) |
Записать свойства объекта. | |
Функции инициализации. | |
MbMatrix3D & | Init () |
Инициализировать матрицу как единичную. | |
MbMatrix3D & | Init (const MbMatrix3D &) |
Инициализировать элементами другой матрицы. | |
MbMatrix3D & | Init (const MbMatrix &) |
Инициализировать двумерной матрицей. | |
MbMatrix3D & | Init (const MbPlacement3D &) |
Инициализировать плейсментом. | |
MbMatrix3D & | Init (const MbMatrix3D &a, const MbMatrix3D &b) |
Инициализировать произведением заданных матриц. Подробнее... | |
Функции проверки свойств матриц. | |
bool | IsInvert () const |
Выдать признак отрицательности детерминанта матрицы вращения. | |
bool | IsSingle () const |
Выдать признак единичности матрицы. | |
bool | IsSingleEps (double eps=PARAM_EPSILON) const |
Выдать признак единичности матрицы с заданной точностью. | |
bool | IsTranslation () const |
Выдать признак не равенства нулю вектора трансляции. | |
bool | IsRotation () const |
Выдать признак не единичности матрицы вращения. | |
bool | IsReflection () const |
Выдать признак отрицательности детерминанта матрицы вращения. | |
bool | IsLeft () const |
Выдать признак лево-определенной матрицы. | |
bool | IsOrt () const |
Выдать признак ортогональности для случая аффинной матрицы. | |
bool | IsOrthogonal () const |
Выдать признак ортогональности для матрицы вращения. | |
bool | IsAffine () const |
Выдать признак того, что матрица вращения произвольная аффинная. | |
bool | IsScaling () const |
Выдать признак не равенства 1.0 масштабного компонента. Подробнее... | |
bool | IsPerspective () const |
bool | IsUnSet () const |
Проверить, что битовые флаги не установлены. | |
bool | IsSame (const MbMatrix3D &, double accuracy) const |
Являются ли объекты равными? | |
bool | IsAbsIdentical (const MbMatrix3D &m) const |
Выдать признак идентичности матриц. | |
bool | IsTranslationOnly () const |
Выдать признак, что есть только перенос. | |
bool | IsSubstitutionOnly (double epsilon=METRIC_EPSILON) const |
Совпадают ли оси описываемой матрицей ЛСК с глобальными осями с точностью до поворотов на 90 градусов? | |
bool | IsIsotropic (double &l) const |
Выдать признак изотропности. Подробнее... | |
Функции доступа к элементам матрицы. | |
double | El (size_t i, size_t j) const |
Дать элемент матрицы. | |
const double * | GetEl () const |
Дать указатель на первый элемент матрицы. | |
const MbVector3D & | GetAxisX () const |
Дать первую строку (ось X). | |
const MbVector3D & | GetAxisY () const |
Дать вторую строку (ось Y). | |
const MbVector3D & | GetAxisZ () const |
Дать третью строку (ось Z). | |
const MbCartPoint3D & | GetOrigin () const |
Дать четвертую строку (начало системы координат). | |
MbVector3D | GetColumn (size_t i) const |
Выдать i-ый вектор-столбец матрицы. | |
MbVector3D | GetRow (size_t i) const |
Выдать i-ую вектор-строку матрицы. | |
MbHomogeneous3D | GetFullColumn (size_t i) const |
Выдать i-ый вектор-столбец матрицы. | |
MbHomogeneous3D | GetFullRow (size_t i) const |
Выдать i-ую вектор-строку матрицы. | |
void | GetOffset (MbCartPoint3D &p) const |
Выдать компоненты сдвига матрицы. | |
Функции модификации элементов матрицы. | |
void | SetEl (const double *_el) |
Присвоить значение элементам матрицы. Подробнее... | |
GLdouble * | SetEl () |
Дать массив элементов матрицы. Подробнее... | |
void | El (size_t i, size_t j, double e) |
Присвоить значение элементу матрицы. Подробнее... | |
void | AddEl (size_t i, size_t j, double e) |
Прибавить число к элементу матрицы. Подробнее... | |
void | MulEl (size_t i, size_t j, double e) |
Умножить элемент матрицы на число. Подробнее... | |
MbVector3D & | SetAxisX () |
Дать первую строку (ось X). | |
MbVector3D & | SetAxisY () |
Дать вторую строку (ось Y). | |
MbVector3D & | SetAxisZ () |
Дать третью строку (ось Z). | |
MbCartPoint3D & | SetOrigin () |
Дать четвертую строку (начало системы координат). | |
void | SetOriginZ (double or_z) |
Установить Z компоненту начала координат. | |
void | SetColumn (size_t i, const MbCartPoint3D &) |
Установить значения в i-ый столбец матрицы. | |
void | SetColumn (size_t i, const MbVector3D &) |
Установить значения в i-ый столбец матрицы. | |
void | SetColumn (size_t i, const MbHomogeneous3D &) |
Установить значения в i-ый столбец матрицы. | |
void | SetRow (size_t i, const MbCartPoint3D &) |
Установить значения в i-ую строку матрицы. | |
void | SetRow (size_t i, const MbVector3D &) |
Установить значения в i-ую строку матрицы. | |
void | SetRow (size_t i, const MbHomogeneous3D &) |
Установить значения в i-ую строку матрицы. | |
void | SetOffset (const MbCartPoint3D &p) |
Установить компоненты сдвига матрицы. | |
void | SetFlag (bool bReflection, bool bAffine=false, bool bOrt=true) const |
Установить флаг состояния. Подробнее... | |
Функции умножения матриц. | |
void | Multiply (const MbMatrix3D &b) |
Умножить на матрицу: this = this * b;. | |
void | Multiply (const MbMatrix3D &a, const MbMatrix3D &b) |
Перемножить матрицы this = a * b. | |
Функции масштабирования. | |
void | Scale (double sx, double sy, double sz) |
Масштабировать по X, Y, Z. Подробнее... | |
void | Scale (double s) |
Масштабировать по X, Y, Z. | |
void | ScaleX (double s) |
Масштабировать по X. | |
void | ScaleY (double s) |
Масштабировать по Y. | |
void | ScaleZ (double s) |
Масштабировать по Z. | |
void | ScaleAxes (double s) |
Масштабировать по X и Y и Z без сдвига. | |
double | GetScaleX () const |
Выдать коэффициент масштабирования по X. | |
double | GetScaleY () const |
Выдать коэффициент масштабирования по Y. | |
double | GetScaleZ () const |
Выдать коэффициент масштабирования по Z. | |
Функции преобразований матрицы: сдвиг, поворот и т.д. | |
void | Move (const MbVector3D &to) |
Сдвинуть на заданный вектор. | |
void | Move (double dx, double dy, double dz) |
Сдвинуть на заданные приращения. | |
void | MoveZero () |
Сдвинуть в нуль. | |
MbMatrix3D & | RotateAbout (const MbVector3D &axisDir, double angle) |
Повернуть вокруг оси. Подробнее... | |
MbMatrix3D & | Rotate (const MbAxis3D &axis, double angle) |
Повернуть вокруг заданной оси на заданный угол. | |
MbMatrix3D & | Rotate (int axis, double angle) |
Повернуть вокруг оси. Подробнее... | |
void | TransformLength (double &len, int axis=1) const |
Преобразовать длину. Подробнее... | |
void | TransformCoord2D (double &x, double &y) const |
Преобразовать координаты. Подробнее... | |
MbMatrix3D & | Transform (const MbMatrix3D &matr) |
Преобразовать согласно заданной матрице. | |
void | Invert (size_t n) |
Инвертировать ось. | |
MbMatrix3D & | Symmetry (const MbCartPoint3D &origin, const MbVector3D &normal) |
Задать матрицу преобразования симметрии (отражение). Подробнее... | |
MbMatrix3D & | Symmetry (const MbCartPoint3D &origin, const MbVector3D &vx, const MbVector3D &vy) |
Задать матрицу преобразования симметрии (отражение). Подробнее... | |
Расчет алгебраических свойств матрицы. | |
void | Adj () |
Транспонировать матрицу. | |
double | Delta (size_t line, size_t column, size_t dim) const |
Вычислить алгебраическое дополнение. | |
double | Det (size_t dim) const |
Вычислить определитель матрицы. | |
MbMatrix3D & | Div (MbMatrix3D &) const |
Вычислить обратную матрицу. Функция вернет аргумент, принятый по ссылке, с результатом вычисления обратной матрицы. | |
Перегрузка алгебраических и логических операций. | |
MbMatrix3D | operator* (const MbMatrix3D &m) const |
Умножить на матрицу: M = this * m. | |
MbMatrix3D & | operator*= (const MbMatrix3D &m) |
Умножить на матрицу: this = this * m. | |
MbMatrix3D & | operator= (const MbMatrix3D &m) |
Присвоить значение. | |
void | operator+= (const MbMatrix3D &) |
Сложить матрицы. | |
void | operator-= (const MbMatrix3D &) |
Вычесть из матрицы матрицу. | |
void | operator*= (double factor) |
Умножить матрицу на число. | |
void | operator/= (double factor) |
Разделить матрицу на число. | |
bool | operator== (const MbMatrix3D &) const |
Сравнить с матрицей (точность - LENGTH_EPSILON). | |
double & | operator() (size_t i, size_t j) |
Доступ по ссылке к элементу матрицы. | |
const double & | operator() (size_t i, size_t j) const |
Значение элемента матрицы. | |
Статические открытые данные | |
static const MbMatrix3D | identity |
Единичная матрица, I = diag(1,1,1,1);. | |
Расширенная матрица преобразования в трёхмерном пространстве.
Расширенная матрица преобразования в трёхмерном пространстве.
Расширенная матрица имеет размерность (4, 4) и представляет собой обычную матрицу, окаймлённую снизу вектором сдвига а справа нулевым столбцом. Трансформация точки p по матрице M имеет вид: r = p * M (строка координат умножается на матрицу слева).
Матрица преобразования из локальной системы координат может быть получена следующим образом:
первая строка матрицы должна быть заполнена соответствующими компонентами первого вектора локальной системы, вторая строка матрицы должна быть заполнена соответствующими компонентами второго вектора локальной системы, третья строка матрицы должна быть заполнена соответствующими компонентами третьего вектора локальной системы, последняя строка матрицы должна быть заполнена соответствующими координатами положения начала локальной системы. Матрица трансформации состоит из четырёх блоков:
| R, P |
| V, S |
, где R - матрица вращения, тензор размерностью (3, 3), V - вектор сдвига, тензор (0, 3), P - вектор перспективы, тензор (3, 0) (всегда ноль), S - скаляр масштабного преобразования (единица).
Для ускорения вычислений матрица имеет дополнительные данные - флаг состояния.
Для получения данных матрицы извне следует пользоваться методами Get...
Для модификации данных матрицы извне следует пользоваться методами Set..., которые автоматически сбрасывают флаг системы в неустановленное состояние.
|
inlineexplicit |
Конструктор по двум матрицам.
Матрица определяется как произведение двух исходных: C = (B * A).
[in] | A,B | - Исходные матрицы. |
MbMatrix3D& MbMatrix3D::Init | ( | const MbMatrix3D & | a, |
const MbMatrix3D & | b | ||
) |
Инициализировать произведением заданных матриц.
Инициализировать произведением заданных матриц. this = b * a (!= a * b)!!!.
[in] | a,b | - Исходные матрицы. |
|
inline |
Выдать признак не равенства 1.0 масштабного компонента.
Выдать признак не равенства нулю вектора перспективы.
bool MbMatrix3D::IsIsotropic | ( | double & | l | ) | const |
Выдать признак изотропности.
Выполняется проверка, является ли матрица ортогональной с равными по длине осями X, Y и Z (круг остается кругом).
[out] | l | - Длина ортов осей X, Y и Z. |
|
inline |
Присвоить значение элементам матрицы.
Элементы матрицы инициализируются элементами исходного массива.
[in] | _el | - Исходный массив. |
|
inline |
Дать массив элементов матрицы.
ТОЛЬКО ДЛЯ OGL !!!
|
inline |
Присвоить значение элементу матрицы.
Присвоить значение элементу матрицы.
[in] | i | - Индекс строки. |
[in] | j | - Индекс столбца. |
[in] | e | - Исходное значение, которое надо присвоить элементу матрицы. |
|
inline |
Прибавить число к элементу матрицы.
Прибавить число к элементу матрицы.
[in] | i | - Индекс строки. |
[in] | j | - Индекс столбца. |
[in] | e | - Исходное число, которое надо прибавить к элементу матрицы. |
|
inline |
Умножить элемент матрицы на число.
Умножить элемент матрицы на число.
[in] | i | - Индекс строки. |
[in] | j | - Индекс столбца. |
[in] | e | - Исходное число, на которое надо умножить элемент матрицы. |
void MbMatrix3D::SetFlag | ( | bool | bReflection, |
bool | bAffine = false , |
||
bool | bOrt = true |
||
) | const |
Установить флаг состояния.
Установить флаг состояния.
[in] | bReflection | - Флаг отрицательности детерминанта матрицы вращения. |
[in] | bAffine | - Флаг аффинности. |
[in] | bOrt | - Флаг ортогональности. |
void MbMatrix3D::Scale | ( | double | sx, |
double | sy, | ||
double | sz | ||
) |
Масштабировать по X, Y, Z.
Масштабировать по X, Y, Z.
[in] | sx,sy,sz | - Коэффициенты масштабирования для каждой из осей. |
MbMatrix3D& MbMatrix3D::RotateAbout | ( | const MbVector3D & | axisDir, |
double | angle | ||
) |
Повернуть вокруг оси.
Повернуть вокруг оси, проходящей через центр координат в направлении axisDir.
[in] | axisDir | - Вектор, задающий направление поворота. |
[in] | angle | - Угол поворота. |
MbMatrix3D& MbMatrix3D::Rotate | ( | int | axis, |
double | angle | ||
) |
Повернуть вокруг оси.
Повернуть вокруг оси X, Y, Z.
[in] | axis | - Номер оси, т.е. AXIS_0X, AXIS_0Y или AXIS_0Z. |
[in] | angle | - Угол поворота. |
void MbMatrix3D::TransformLength | ( | double & | len, |
int | axis = 1 |
||
) | const |
Преобразовать длину.
Длина преобразуются согласно матрице (*this).
[in,out] | len | - Длина. |
[in] | axis | - Ось, по которой отмеряется длина. |
|
inline |
Преобразовать координаты.
Координаты преобразуются согласно матрице. Преобразовываются две координаты (z = 0).
[in,out] | x,y | - Координаты по x и y. |
MbMatrix3D& MbMatrix3D::Symmetry | ( | const MbCartPoint3D & | origin, |
const MbVector3D & | normal | ||
) |
Задать матрицу преобразования симметрии (отражение).
Находится матрица для преобразования симметрии относительно плоскости, заданной точкой и нормалью.
[in] | origin | - Точка плоскости. |
[in] | normal | - Нормаль плоскости. |
MbMatrix3D& MbMatrix3D::Symmetry | ( | const MbCartPoint3D & | origin, |
const MbVector3D & | vx, | ||
const MbVector3D & | vy | ||
) |
Задать матрицу преобразования симметрии (отражение).
Находится матрица для преобразования симметрии относительно плоскости, заданной точкой и двумя векторами.
[in] | origin | - Точка плоскости (начало системы координат). |
[in] | vx,vy | - Векторы, параллельные плоскости. |
void MbMatrix3D::MouldCavityScale | ( | MbCartPoint3D & | fixedPoint, |
double | deltaX, | ||
double | deltaY, | ||
double | deltaZ | ||
) |
Получить матрицу для масштабирования каверны литейной формы.
Получить матрицу для масштабирования каверны литейной формы.
[in] | fixedPoint | - Неподвижная точка. |
[in] | deltaX,deltaY,deltaZ | - Относительное приращение размера по направлению соответствующей координаты. |
bool MbMatrix3D::SetRoundedValue | ( | bool | total, |
double | eps | ||
) |
Округлить с точностью до eps.
Округлить с точностью до eps.
[in] | total | - Если true, то округлять в любом случае. |
[in] | eps | - Точность округления. |