#include "StdAfx.h"
#include ".\matrix2d.h"
//dx和dy用来指定x和y方向的平移量,若dx = dy = 0,则:
//(1) 当m21 = m12 = 0,m11 = -1,m22 = 1时,有x*= -x,y*= y,产生与y轴对称的反射图形;
//(2) 当m21 = m12 = 0,m11 = 1,m22 = -1时,有x*= x,y*= -y,产生与x轴对称的反射图形;
//(3) 当m21 = m12 = 0,m11 = m22 = -1时,有x*= -x,y*= -y,产生与原点对称的反射图形;
//(4) 当m21 = m12 = 1,m11 = m22 = 0时,有x*= y,y*= x,产生与直线y = x对称的反射图形;
//(5) 当m21 = m12 = -1,m11 = m22 = 0时,有x*= -y,y*= -x,产生与直线y = -x对称的反射图形;
CMatrix2D::CMatrix2D(void)
{
Reset();
}
CMatrix2D::~CMatrix2D(void)
{
}
// set identity matrix elements
void CMatrix2D::Reset(void)
{
SetMatrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
}
void CMatrix2D::Rotate(double thetaAngle)//旋转变换
{
double v;
v=sin(thetaAngle);
m[1]=v;
m[2]=-v;
v=cos(thetaAngle);
m[0]=v;
m[3]=v;
double dx=m[4];
double dy=m[5];
m[4]=(1-cos(thetaAngle))*dx+dy*sin(thetaAngle);
m[5]=(1-cos(thetaAngle))*dy-dx*sin(thetaAngle);
}
void CMatrix2D::Translate(double dx, double dy)//平移变换
{
m[4]+=dx;
m[5]+=dy;
}
void CMatrix2D::Shear(double shearX, double shearY)//错切变换
{
m[2]=shearX;
m[1]=shearY;
}
//当scaleX==scaleY时等比例缩放,0<scaleX<1时缩小,scaleX>1时放大
void CMatrix2D::Scale(double scaleX, double scaleY)//比例缩放
{
m[0]*=scaleX;
m[3]*=scaleY;
}
void CMatrix2D::RotateAt(double centerX, double centerY, double thetaAngle)
{
Translate(-centerX,-centerY);
Rotate(thetaAngle);
Translate(centerX,centerY);
}
// | a1 a2 | | m[0] m[1] |
//Matrix = | b1 b2 | = | m[2] m[3] |
// | c1 c2 | | m[4] m[5] |
void CMatrix2D::SetMatrix(double a1, double a2, double b1, double b2, double c1, double c2)
{
m[0]=a1;
m[1]=a2;
m[2]=b1;
m[3]=b2;
m[4]=c1;
m[5]=c2;
}
void CMatrix2D::SetMatrix(double *pm)
{
memcpy(m,pm,sizeof(double)*6);
}
void CMatrix2D::operator=(CMatrix2D& md)
{
memcpy(m,md.m,sizeof(double)*6);
}
void CMatrix2D::Exchange(double& x, double& y, BOOL bUndo)
{
double x0=x;
double y0=y;
if(!bUndo)
{
x=x0*m[0] + y0*m[2] + m[4];
y=x0*m[1] + y0*m[3] + m[5];
}
else
{
x=(m[3]*(x0-m[4]) + m[2]*(m[5]-y0))/(m[0]*m[3]-m[1]*m[2]);
y=(m[1]*(x0-m[4]) + m[0]*(m[5]-y0))/(m[0]*m[3]-m[1]*m[2]);
y*=-1;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
矩阵运算Matrix2D
共2个文件
h:1个
cpp:1个
4星 · 超过85%的资源 需积分: 48 18 下载量 105 浏览量
2012-03-27
09:42:40
上传
评论
收藏 2KB ZIP 举报
温馨提示
该类封装了平面坐标的矩阵运算的方法,包括正算、反算以及旋转参数、平移参数、错切变换、比例绽放参数的设置,请详见代码中的注释
资源推荐
资源详情
资源评论
收起资源包目录
Matrix2D.zip (2个子文件)
Matrix2D.h 1KB
Matrix2D.cpp 2KB
共 2 条
- 1
资源评论
- liuxb02192013-10-29不错,可以参考……
- lindaohui2012-12-17C++的,搞错了,还以为是 .net 版的,不过也可以看下。
- dennisgull2013-04-22还不错,有一定参考价值
dfzgq_cn
- 粉丝: 7
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功