⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix3d.cpp

📁 C arm 3D traslate 模擬C手臂在三度空間移動
💻 CPP
字号:
// Matrix3D.cpp: implementation of the CMatrix3D class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OpenGLtest.h"
#include "Matrix3D.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/*
CMatrix3D::CMatrix3D()
{

}*/

CMatrix3D::~CMatrix3D()
{

}




CMatrix3D CMatrix3D::operator+(double R)
{
  CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]+R;
  }

  return TempObj;

}



CMatrix3D CMatrix3D::operator-(double R)
{
  CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]-R;
  }

   return TempObj;

}



CMatrix3D CMatrix3D::operator*(double R)
{
  CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]*R;
  }

  return TempObj;

}



CMatrix3D CMatrix3D::operator/(double R)
{
  CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]/R;
  
  }

  return TempObj;

}


CMatrix3D CMatrix3D::operator+(CMatrix3D R)
{
 CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]+R.m[i][j];
  }

  return TempObj;

}


CMatrix3D CMatrix3D::operator-(CMatrix3D R)
{
 CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	TempObj.m[i][j]=this->m[i][j]-R.m[i][j];
  }

  return TempObj;

}



CMatrix3D CMatrix3D::operator*(CMatrix3D R)
{
 CMatrix3D TempObj;

  for(int i=0;i<3;i++)
  for(int j=0;j<3;j++)
  {
	  //for(int s=0;s<3;s++)
   TempObj.m[i][j]=this->m[i][0]*R.m[0][j]+this->m[i][1]*R.m[1][j]+this->m[i][2]*R.m[2][j];
	  
  }

  return TempObj;

}



CMatrix3D CMatrix3D::operator-()
{

CMatrix3D TempObj;
/*
Matrix3D I;

I.m[0][0]=1;
I.m[0][1]=0;
I.m[0][2]=0;
I.m[1][0]=0;
I.m[1][1]=1;
I.m[1][2]=0;
I.m[2][0]=0;
I.m[2][1]=0;
I.m[2][2]=1;




for(int i=0;i<3;i++)
	
{
   for(int j=0;j<3;j++)
   {
	   

	 

	 if(i==0)
	 {

	  
      I.m[i][j]=I.m[i][j]/this->m[i][i];
     
	  cout<<"I["<<i<<"]["<<j<<"]="<<I.m[i][j]<<endl;
	  TempObj.m[i][j]=this->m[i][j]/this->m[i][i];
     

      I.m[i+1][j]=I.m[i+1][j]-I.m[i+1][i]*TempObj.m[i][j];
	   cout<<"I["<<i+1<<"]["<<j<<"]="<<I.m[i+1][j]<<endl;;
      TempObj.m[i+1][j]=this->m[i+1][j]-this->m[i+1][i]*TempObj.m[i][j];
     	  
	  I.m[i+2][j]=I.m[i+2][j]-I.m[i+2][i]*TempObj.m[i][j];
	  cout<<"I["<<i+2<<"]["<<j<<"]="<<I.m[i+2][j]<<endl;;
	  TempObj.m[i+2][j]=this->m[i+2][j]-this->m[i+2][i]*TempObj.m[i][j];
     
     
     
	  
      I.Display();

	  TempObj.Display();
	 }

	 else if(i==1)
	 {
      
	  I.m[i][j]=I.m[i][j]/TempObj.m[i][i];
	   cout<<"I["<<i<<"]["<<j<<"]="<<I.m[i][j]<<endl;
	  TempObj.m[i][j]=TempObj.m[i][j]/TempObj.m[i][i];
	  cout<<TempObj.m[1][2]/TempObj.m[1][1];
	  cout<<"TempObj["<<i<<"]["<<j<<"]="<<TempObj.m[i][j]<<endl;


	  I.m[i+1][j]=I.m[i+1][j]-TempObj.m[i+1][i]*I.m[i][j];
	  cout<<"I["<<i+1<<"]["<<j<<"]="<<I.m[i+1][j]<<endl;;
	  TempObj.m[i+1][j]=TempObj.m[i+1][j]-TempObj.m[i+1][i]*TempObj.m[i][j];
	  

	  I.m[0][j]=I.m[0][j]-TempObj.m[0][i]*I.m[i][j];
      cout<<"I["<<0<<"]["<<j<<"]="<<I.m[0][j]<<endl;;
	  TempObj.m[0][j]=TempObj.m[0][j]-TempObj.m[0][i]*TempObj.m[i][j];
      
	  
	 
	  
      I.Display();
	  TempObj.Display();
	 }

	 else
	 {
      
	  I.m[i][j]=I.m[i][j]/TempObj.m[i][i];
	   cout<<"I["<<i<<"]["<<j<<"]="<<I.m[i][j]<<endl;
	  TempObj.m[i][j]=TempObj.m[i][j]/TempObj.m[i][i];
      cout<<"TempObj["<<i<<"]["<<j<<"]="<<TempObj.m[i][j]<<endl;

	  I.m[0][j]=I.m[0][j]-TempObj.m[0][i]*I.m[i][j];
	  cout<<"I["<<0<<"]["<<j<<"]="<<I.m[0][j]<<endl;;
	  TempObj.m[0][j]=TempObj.m[0][j]-TempObj.m[0][i]*TempObj.m[i][j];
	  
	  I.m[1][j]=I.m[1][j]-TempObj.m[1][i]*I.m[i][j];
	  cout<<"I["<<1<<"]["<<j<<"]="<<I.m[1][j]<<endl;;
	  TempObj.m[1][j]=TempObj.m[1][j]-TempObj.m[1][i]*TempObj.m[i][j];
     
	  
      
	  

	  
	  I.Display();
	  TempObj.Display();
	 }
	  

	 
   
   
   }
}

//TempObj.Display();
I.Display();

*/


det=m[0][0]*m[1][1]*m[2][2]+m[0][1]*m[1][2]*m[2][0]+m[0][2]*m[1][0]*m[2][1]
    -m[0][2]*m[1][1]*m[2][0]-m[0][1]*m[1][0]*m[2][2]-m[0][0]*m[1][2]*m[2][1];

if(det!=0)
{
TempObj.m[0][0]=(m[1][1]*m[2][2]-m[1][2]*m[2][1])/det;
TempObj.m[0][1]=(-1)*(m[0][1]*m[2][2]-m[0][2]*m[2][1])/det;
TempObj.m[0][2]=(m[0][1]*m[1][2]-m[0][2]*m[1][1])/det;
TempObj.m[1][0]=-1*(m[1][0]*m[2][2]-m[1][2]*m[2][0])/det;
TempObj.m[1][1]=(m[0][0]*m[2][2]-m[0][2]*m[2][0])/det;
TempObj.m[1][2]=-1*(m[0][0]*m[1][2]-m[0][2]*m[1][0])/det;
TempObj.m[2][0]=(m[1][0]*m[2][1]-m[1][1]*m[2][0])/det;
TempObj.m[2][1]=-1*(m[0][0]*m[2][1]-m[0][1]*m[2][0])/det;
TempObj.m[2][2]=(m[0][0]*m[1][1]-m[0][1]*m[1][0])/det;

}

if(det==0)
{

}


 
return TempObj;


}


CVector CMatrix3D::operator*(CVector R)
{


 CVector A;

 for(int i=0;i<3;i++)
 {
    
  A.v[0][i]=this->m[i][0]*R.v[0][0]+this->m[i][1]*R.v[0][1]+this->m[i][2]*R.v[0][2];
 }

  
  


  return A;
}


void CMatrix3D::Display()
{
	cout << "| "<<m[0][0]<< "	,	" <<m[0][1]<<"	,	"<<m[0][2]<<" |"<<endl;
	cout << "| "<<m[1][0]<< "	,	" <<m[1][1]<<"	,	"<<m[1][2]<<" |"<<endl;
	cout << "| "<<m[2][0]<< "	,	" <<m[2][1]<<"	,	"<<m[2][2]<<" |\n"<<endl;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -