资源简介
矩阵变换是进行视图操作的必须具备的知识,在MFC,osg,opengGL中是不可或缺的技术,本资源提供了最规范最健壮的矩阵变换类。
代码片段和文件信息
// GeMatrix2d.cpp: implementation of the CGeMatrix2d class.
//
//////////////////////////////////////////////////////////////////////
#include “GeMatrix2d.h“
#include
#include
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// 构造函数,初始化为单位矩阵
CGeMatrix2d::CGeMatrix2d()
{
memset(m_entry0sizeof(m_entry));
m_entry[0][0] = m_entry[1][1] = m_entry[2][2] = 1.0;
}
// 拷贝构造函数
CGeMatrix2d::CGeMatrix2d(const CGeMatrix2d& src)
{
int i = 0;
int j = 0;
for(i = 0; i<3; i++)
{
for(j = 0; j<3;j++)
{
m_entry[i][j] = src.m_entry[i][j];
}
}
}
CGeMatrix2d::~CGeMatrix2d()
{
}
// 矩阵乘法
CGeMatrix2d CGeMatrix2d::operator * (const CGeMatrix2d& mat) const
{
int ijk;
CGeMatrix2d m;
for(i=0; i<3;i++)
{
for(j=0; j<3; j++)
{
m.m_entry[i][j] = 0;
for(k=0;k<3;k++)
{
m.m_entry[i][j] = m.m_entry[i][j] + m_entry[i][k]*mat.m_entry[k][j];
}
}
}
return m;
}
CGeMatrix2d& CGeMatrix2d::operator *= (const CGeMatrix2d& mat)
{
(*this) = (*this) * mat;
return (*this);
}
// 返回比例系数,为矩阵列线性部分向量中长度最大的值
double CGeMatrix2d::scale(void) const
{
// 上面注释的部分和下面具有相同的效果,上面思路清晰,但是运算中需要多次分配内存
double len1 = sqrt(m_entry[0][0]*m_entry[0][0] + m_entry[0][1]*m_entry[0][1] );
double len2 = sqrt(m_entry[1][0]*m_entry[1][0] + m_entry[1][1]*m_entry[1][1] );
return ( (len1>len2)? len1 : len2 );
}
// 将矩阵设置为单位矩阵
CGeMatrix2d& CGeMatrix2d::setToIdentity(void)
{
// *!* 实现该函数
memset(m_entry0sizeof(m_entry));
m_entry[0][0] = m_entry[1][1] = m_entry[2][2] = 1.0;
return *this;
}
// 初始化为平移变换矩阵
CGeMatrix2d& CGeMatrix2d::setToTranslation(double dx double dy)
{
// *!* 实现该函数
setToIdentity();
m_entry[2][0] = dx;
m_entry[2][1]= dy;
return *this;
}
// 初始化为以坐标原点为基点的旋转变换矩阵,单位为弧度
CGeMatrix2d& CGeMatrix2d::setToRotation (double angle)
{
// *!* 实现该函数
m_entry[0][0] = cos(angle);
m_entry[0][1] = sin(angle);
m_entry[1][0] = -sin(angle);
m_entry[1][1] = cos(angle);
return *this;
}
// 初始化为以坐标原点为基点的比例变换矩阵
CGeMatrix2d& CGeMatrix2d::setToScaling (double scaleAll)
{
// *!* 实现该函数
m_entry[0][0] = m_entry[1][1] = scaleAll;
return *this;
}
// 初始化为关于x轴对称的矩阵
CGeMatrix2d& CGeMatrix2d::setToMirrorX (void)
{
// *!* 实现该函数
m_entry[0][0] = 1;
m_entry[1][1] = -1;
return *this;
}
// 初始化为关于Y轴对称的矩阵
CGeMatrix2d& CGeMatrix2d::setToMirrorY (void)
{
// *!* 实现该函数
m_entry[0][0] = -1;
m_entry[1][1] = 1;
return *this;
}
const CGeMatrix2d & CGeMatrix2d::operator =(const CGeMatrix2d &t)
{
if(this == &t) { return *this;}
memcpy(this->m_entry t.m_entry sizeof(m_entry));
return *this;
}
// -----------------------------------------------------------------------------
//
//
//
// 构造函数
CGePoint2d::CGePoint2d()
{
m_dat[0] = m_dat[1] = 0;
}
CGePoint2d::CGePoint2d(double xdouble y)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 17917 2010-04-03 21:38 test_matrix\Debug\GeMatrix2d.obj
文件 5556 2010-04-03 21:44 test_matrix\Debug\main.obj
文件 225362 2010-04-03 21:44 test_matrix\Debug\test_matrix.exe
文件 240632 2010-04-03 21:44 test_matrix\Debug\test_matrix.ilk
文件 206804 2010-04-03 21:39 test_matrix\Debug\test_matrix.pch
文件 500736 2010-04-03 21:44 test_matrix\Debug\test_matrix.pdb
文件 41984 2010-02-11 18:50 test_matrix\Debug\vc60.idb
文件 53248 2010-04-03 21:44 test_matrix\Debug\vc60.pdb
文件 4495 2010-04-03 21:38 test_matrix\GeMatrix2d.cpp
文件 2133 2006-10-23 16:01 test_matrix\GeMatrix2d.h
文件 816 2010-04-03 21:44 test_matrix\main.cpp
文件 4469 2006-10-23 10:52 test_matrix\test_matrix.dsp
文件 545 2006-10-23 09:21 test_matrix\test_matrix.dsw
文件 50176 2010-03-14 15:52 test_matrix\test_matrix.ncb
文件 53760 2010-03-14 15:52 test_matrix\test_matrix.opt
文件 256 2010-02-11 18:50 test_matrix\test_matrix.plg
文件 258 2010-03-14 15:52 test_matrix\test_matrix.positions
文件 2560 2010-03-18 09:23 test_matrix\test_matrix.suo
目录 0 2011-01-05 18:52 test_matrix\Debug
目录 0 2011-01-05 18:52 test_matrix
----------- --------- ---------- ----- ----
1411707 20
相关资源
- 51单片机DIY制作:旋转LED数字显示电子
- openGL 小汽车
- 计算机图形学正十二面体旋转
- 用c语言写的OBB旋转及碰撞检测源代码
- 使用DirectX3D、传统方法绘制的绕Y轴不
- VC++旋转风车代码
- 计算机图形学,实现茶壶旋转,颜色
- MFC+OPENGL实现3D茶壶的旋转、平移
- 图像处理 图像旋转 C/C++语言实现
- 带旋转的模板匹配的原理及算法实现
- C++实现灰度图像的几何变换,包括转
- qt5 旋转(.patch文件源码)
- Qt实现可拉伸矩形、圆等,可旋转角度
- C++实战源码-图像旋转
- C++实战源码-可任意旋转的文字
- C++实战源码-空间旋转字体
- C++实战源码-旋转的文字
- VC++截屏,并截屏图像旋转(简单)
- c++ 旋转的图像(遮罩贴图)
- C++实战源码-平移图像
- 利用OpenGL函数画一个三维物体实现在
- c++ 图片立体旋转源码
- 编程实现图片的翻转效果翻转90度和任
- mfc 二维图形的平移、旋转、比例变换
- MFC中OpenGL移动缩放旋转.rar
- 纯C++实现bmp图片旋转
- 带旋转的模板匹配的原理及算法实现
- MFC调用Opengl实现三维图形的旋转平移
- C语言实现二值图像旋转任意角度
- 计算机图形学旋转茶壶
评论
共有 条评论