TouchVG framework
|
二维齐次变换矩阵类 更多...
#include <mgmat.h>
Public 成员函数 | |
Matrix2d () | |
构造为单位矩阵 更多... | |
Matrix2d (const Matrix2d &src) | |
拷贝构造函数 更多... | |
Matrix2d (float _m11, float _m12, float _m21, float _m22, float _dx, float _dy) | |
给定元素构造 更多... | |
Matrix2d (const Vector2d &e0, const Vector2d &e1, const Point2d &origin) | |
给定两坐标轴矢量和原点构造 更多... | |
Matrix2d | operator* (const Matrix2d &mat) const |
矩阵乘法 更多... | |
Matrix2d & | operator*= (const Matrix2d &mat) |
矩阵乘法 更多... | |
Matrix2d | operator* (float s) const |
矩阵的数乘, 矩阵 * 数 更多... | |
Matrix2d & | operator*= (float s) |
矩阵的数乘, 矩阵 *= 数 更多... | |
Matrix2d | operator/ (float s) const |
矩阵的数乘, 矩阵 / 数 更多... | |
Matrix2d & | operator/= (float s) |
矩阵的数乘, 矩阵 /= 数 更多... | |
Matrix2d & | scaleBy (float sx, float sy) |
比例放缩 更多... | |
Matrix2d & | scaleBy (float s) |
比例放缩、矩阵的数乘 更多... | |
Matrix2d & | preMultBy (const Matrix2d &leftSide) |
左乘一个矩阵,leftSide * (*this) 更多... | |
Matrix2d & | postMultBy (const Matrix2d &rightSide) |
右乘一个矩阵,(*this) * rightSide 更多... | |
Matrix2d & | setToProduct (const Matrix2d &m1, const Matrix2d &m2) |
设置为两个矩阵的乘积 (m1 * m2) 更多... | |
void | transformPoints (int count, Point2d *points) const |
对多个点进行矩阵变换 更多... | |
void | transformVectors (int count, Vector2d *vectors) const |
对多个矢量进行矩阵变换 更多... | |
float | det () const |
行列式值 更多... | |
bool | invert () |
设置为逆矩阵 更多... | |
Matrix2d | inverse () const |
返回逆矩阵 更多... | |
bool | isInvertible () const |
判断矩阵是否可逆 更多... | |
float | scale () const |
比例大小 更多... | |
float | scaleX () const |
X比例大小 更多... | |
float | scaleY () const |
Y比例大小 更多... | |
float | angle () const |
X旋转角度,弧度 更多... | |
bool | operator== (const Matrix2d &mat) const |
判断两个矩阵是否相等 更多... | |
bool | operator!= (const Matrix2d &mat) const |
判断两个矩阵是否不相等 更多... | |
bool | isEqualTo (const Matrix2d &mat, const Tol &tol=Tol::gTol()) const |
用欧拉规则判断两个矩阵是否相等,即判断矩阵的行矢量是否相等 更多... | |
bool | isIdentity () const |
判断是否为单位矩阵 更多... | |
bool | isOrtho () const |
判断矩阵的坐标轴矢量是否分别水平和垂直 更多... | |
bool | hasMirror (Vector2d &reflex) const |
判断矩阵中是否含有对称成分 更多... | |
bool | isConformal (float &scaleX, float &scaleY, float &angle, bool &isMirror, Vector2d &reflex) const |
得到比例、旋转、镜像成分 更多... | |
Matrix2d & | setCoordSystem (const Vector2d &e0, const Vector2d &e1, const Point2d &origin) |
设置为原点为origin,坐标轴矢量为e0和e1的坐标系 更多... | |
void | getCoordSystem (Vector2d &e0, Vector2d &e1, Point2d &origin) const |
得到坐标系的原点origin,坐标轴矢量e0和e1 更多... | |
Matrix2d & | setToIdentity () |
设置为单位矩阵 更多... | |
Matrix2d & | set (float _m11, float _m12, float _m21, float _m22, float _dx, float _dy) |
设置矩阵元素 更多... | |
Matrix2d & | setToTranslation (const Vector2d &vec) |
设置为平移变换矩阵 更多... | |
Matrix2d & | setToRotation (float angle, const Point2d ¢er=Point2d::kOrigin()) |
设置为以一点为中心的旋转变换矩阵 更多... | |
Matrix2d & | setToScaling (float scale, const Point2d ¢er=Point2d::kOrigin()) |
设置为以一点为中心的放缩变换矩阵 更多... | |
Matrix2d & | setToScaling (float scaleX, float scaleY, const Point2d ¢er=Point2d::kOrigin()) |
设置为以一点为中心的放缩变换矩阵 更多... | |
Matrix2d & | setToMirroring (const Point2d &pnt=Point2d::kOrigin()) |
设置为关于一点对称的变换矩阵 更多... | |
Matrix2d & | setToMirroring (const Point2d &pnt, const Vector2d &dir) |
设置为以直线(pnt,dir)为中心线的对称变换矩阵 更多... | |
Matrix2d & | setToShearing (float sx, float sy, const Point2d &pnt=Point2d::kOrigin()) |
设置为错切变换矩阵 更多... | |
静态 Public 成员函数 | |
static const Matrix2d | kIdentity () |
单位矩阵 更多... | |
static Matrix2d | coordSystem (const Vector2d &e0, const Vector2d &e1, const Point2d &origin) |
返回原点为origin,坐标轴矢量为e0和e1的坐标系 更多... | |
static Matrix2d | coordSystem (const Point2d &origin, float scaleX, float scaleY=0, float angle=0) |
返回给定原点、比例和旋转角度的坐标系 更多... | |
static Matrix2d | translation (const Vector2d &vec) |
得到平移变换矩阵 更多... | |
static Matrix2d | rotation (float angle, const Point2d ¢er=Point2d::kOrigin()) |
得到以一点为中心的旋转变换矩阵 更多... | |
static Matrix2d | scaling (float scale, const Point2d ¢er=Point2d::kOrigin()) |
得到以一点为中心的放缩变换矩阵 更多... | |
static Matrix2d | scaling (float scaleX, float scaleY, const Point2d ¢er=Point2d::kOrigin()) |
得到以一点为中心的放缩变换矩阵 更多... | |
static Matrix2d | mirroring (const Point2d &pnt=Point2d::kOrigin()) |
得到关于一点对称的变换矩阵 更多... | |
static Matrix2d | mirroring (const Point2d &pnt, const Vector2d &dir) |
得到以直线(pnt,dir)为中心线的对称变换矩阵 更多... | |
static Matrix2d | shearing (float sx, float sy, const Point2d &pnt=Point2d::kOrigin()) |
得到错切变换矩阵 更多... | |
static Matrix2d | transformWith2P (const Point2d &from1, const Point2d &from2, const Point2d &to1, const Point2d &to2) |
得到两个点同时移动后形成的变化矩阵 更多... | |
Public 属性 | |
float | m11 |
矩阵元素,代表X方向线性变换分量 更多... | |
float | m12 |
矩阵元素,代表X方向线性变换分量 更多... | |
float | m21 |
矩阵元素,代表Y方向线性变换分量 更多... | |
float | m22 |
矩阵元素,代表Y方向线性变换分量 更多... | |
float | dx |
矩阵元素,代表X方向平移量 更多... | |
float | dy |
矩阵元素,代表Y方向平移量 更多... | |
友元 | |
Matrix2d | operator* (float s, const Matrix2d &mat) |
矩阵的数乘, 数 * 矩阵 更多... | |
二维齐次变换矩阵类
变换矩阵类Matrix用于二维图形的仿射变换。矩阵 M 的形式为:
e0x e0y 0
e1x e1y 0
dx dy 1
其中矩阵 A:
e0x e0y
e1x e1y
称为 M 的线性部分,其作用是对图形进行伸缩、旋转、对称和错切等变换。
行向量 T (dx, dy) 称为 M 的平移部分,其作用是对图形进行平移变换。
Point的点pnt的对应变换点为 P x M,行矢量 P = (pnt.x, pnt.y, 1)
Vector的矢量vec的对应变换矢量为 V x M,M 的平移部分不参与计算。
每个矩阵 M 对应一个坐标系,其坐标原点为(dx, dy),坐标轴为矢量(e0x, e0y)和 (e1x, e1y)。M 为将(0,0)(1,0)(0,1)映射到(dx, dy)(e0x, e0y)(e1x, e1y)的矩阵。