📄 gismatrix.cpp
字号:
// Matrix.cpp: implementation of the CMatrix class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GISMatrix.h"
#include <math.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMatrix::CMatrix()
{
}
CMatrix::~CMatrix()
{
}
CMatrix& CMatrix::RotateVectorAboutXbyAng(double angle)
{
mat[0][0]=1.0;
mat[0][1]=0.0;
mat[0][2]=0.0;
mat[1][0]=0.0;
mat[1][1]=cos(angle);
mat[1][2]=-sin(angle);
mat[2][0]=0.0;
mat[2][1]=sin(angle);
mat[2][2]=cos(angle);
return *this;
}
CMatrix& CMatrix::RotateVectorAboutYbyAng(double angle)
{
mat[0][0]=cos(angle);
mat[0][1]=0.0;
mat[0][2]=sin(angle);
mat[1][0]=0.0;
mat[1][1]=1.0;
mat[1][2]=0.0;
mat[2][0]=-sin(angle);
mat[2][1]=0.0;
mat[2][2]=cos(angle);
return *this;
}
CMatrix& CMatrix::RotateVectorAboutZbyAng(double angle)
{
mat[0][0]=cos(angle);
mat[0][1]=-sin(angle);
mat[0][2]=0.0;
mat[1][0]=sin(angle);
mat[1][1]=cos(angle);
mat[1][2]=0.0;
mat[2][0]=0.0;
mat[2][1]=0.0;
mat[2][2]=1.0;
return *this;
}
CMatrix& CMatrix::RotateCoordSysAboutXbyAng(double angle)
{
mat[0][0]=1.0;
mat[0][1]=0.0;
mat[0][2]=0.0;
mat[1][0]=0.0;
mat[1][1]=cos(angle);
mat[1][2]=sin(angle);
mat[2][0]=0.0;
mat[2][1]=-sin(angle);
mat[2][2]=cos(angle);
return *this;
}
CMatrix& CMatrix::RotateCoordSysAboutYbyAng(double angle)
{
mat[0][0]=cos(angle);
mat[0][1]=0.0;
mat[0][2]=-sin(angle);
mat[1][0]=0.0;
mat[1][1]=1.0;
mat[1][2]=0.0;
mat[2][0]=sin(angle);
mat[2][1]=0.0;
mat[2][2]=cos(angle);
return *this;
}
CMatrix& CMatrix::RotateCoordSysAboutZbyAng(double angle)
{
mat[0][0]=cos(angle);
mat[0][1]=sin(angle);
mat[0][2]=0.0;
mat[1][0]=-sin(angle);
mat[1][1]=cos(angle);
mat[1][2]=0.0;
mat[2][0]=0.0;
mat[2][1]=0.0;
mat[2][2]=1.0;
return *this;
}
CMatrix& CMatrix::RotateVectorAboutVectorbyAng(CVector& vec, double angle)
{
double sangle=sin(angle);
double cangle=cos(angle);
double vers,t1;
vers=1.0-cangle;
t1=vec.y*vec.z*vers;
mat[2][1]=t1+vec.x*sangle;
mat[1][2]=t1-vec.x*sangle;
t1=vec.x*vec.z*vers;
mat[2][0]=t1-vec.y*sangle;
mat[0][2]=t1+vec.y*sangle;
t1=vec.x*vec.y*vers;
mat[0][1]=t1-vec.z*sangle;
mat[1][0]=t1+vec.z*sangle;
mat[0][0]=1.0-(vec.y*vec.y+vec.z*vec.z)*vers;
mat[1][1]=1.0-(vec.x*vec.x+vec.z*vec.z)*vers;
mat[2][2]=1.0-(vec.x*vec.x+vec.y*vec.y)*vers;
return *this;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -