資源簡介
用C++編制的一個將三角形在二維平面進(jìn)行復(fù)合矩陣變換的小程序,包括縮放,平移和旋轉(zhuǎn)的復(fù)合變換

代碼片段和文件信息
#include
#include
#include
/*Set?initial?display-window?size.*/
GLsizei?winWidth=600winHeight=600;
/*Set?range?for?world?coordinates.*/
GLfloat?xwcMin=0.0xwcMax=225.0;
GLfloat?ywcMin=0.0ywcMax=225.0;//10
class?wcPt2D{
public:
GLfloat?xy;
};
typedef?GLfloat?Matrix3x3?[3][3];
Matrix3x3?matComposite;
//20
const?GLfloat?pi=3.14159;
void?init?(void)
{
/*Set?color?of?display?window?to?white.*/
glClearColor?(1.01.01.00.0);
}
/*Constract?the?3?by?3?identity?matrix.*/
void?matrix3x3SetIdentity(Matrix3x3?matIdent3x3)//30
{
GLint?rowcol;
for(row=0;row<3;row++)
for(col=0;col<3;col++)
matIdent3x3[row][col]=(row==col);
}
/*Premultiply?matrix?m1?times?m2?store?result?in?m2.*/
void?matrix3x3PreMultiply(Matrix3x3?m1Matrix3x3?m2)//40
{
GLint?rowcol;
Matrix3x3?matTemp;
for(row=0;row<3;row++)
for(col=0;col<3;col++)
matTemp[row][col]=m1[row][0]*m2[0][col]+m1[row][1]*m2[1][col]+m1[row][2]*m2[2][col];
for(row=0;row<3;row++)
for(col=0;col<3;col++)//50
m2[row][col]=matTemp[row][col];
}
void?translate2D(GLfloat?tx?GLfloat?ty)
{
Matrix3x3?matTransl;
/*Intialize?translation?matrix?to?identity.*/
matrix3x3SetIdentity(matTransl);
//60
matTransl[0][2]=tx;
matTransl[1][2]=ty;
/*Concatenate?matTransl?with?the?composite?matrix.*/
matrix3x3PreMultiply(matTransl?matComposite);
}
void?rotate2D(wcPt2D?pivotPt?GLfloat?theta)
{
Matrix3x3?matRot;//70
/*Initialize?rotation?matrix?to?identy.*/
matrix3x3SetIdentity(matRot);
matRot[0][0]=cos(theta);
matRot[0][1]=-sin(theta);
matRot[0][2]=pivotPt.x*(1-cos(theta))+pivotPt.y*sin(theta);
matRot[1][0]=sin(theta);
matRot[1][1]=cos(theta);//80
matRot[1][2]=pivotPt.y*(1-cos(theta))-pivotPt.x*sin(theta);
/*Concatenate?matRot?with?the?composite?matrix.*/
matrix3x3PreMultiply(matRot?matComposite);
}
void?scale2D(GLfloat?sxGLfloat?sywcPt2D?fixedPt)
{
Matrix3x3?matScale;
//90
/*Initialize?scaling?matrix?to?identity.*/
matrix3x3SetIdentity(matScale);
matScale[0][0]=sx;
matScale[0][2]=(1-sx)*fixedPt.x;
matScale[1][1]=-sy;
matScale[1][2]=(1-sy)*fixedPt.y;
/*Concatenate?matScale?with?the?composite?matrix.*/
matrix3x3PreMultiply(matScale?matComposite);//100
}
/*Using?the?composite?matrix?calculate?transformed?coordinates.*/
void?transformVerts2D(GLint?nVerts?wcPt2D?*verts)
{
GLint?k;
GLfloat?temp;
for(k=0;k temp=matComposite[0][0]*verts[k].x+matComposite[0][1]*verts[k].y+matComposite[0][2];//110
verts[k].y=matComposite[1][0]*verts[k].x+matComposite[1][1]*verts[k].y+matComposite[1][2];
verts[k].x=temp;
}
}
void?triangle(wcPt2D?*verts)
{
GLint?k;
glBegin(GL_TRIANGLES);//120
for(k=0;k<3;k++)
glVertex2f(verts[k].xverts[k].y);
glEnd();
}
void?displayFcn(void)
{
/*Define?initial?position?for?triangle*/
????GLint?nVerts=3;
wcPt2D?verts[3]={{50.025.0}{150.025.0}{100.0100.0}};//
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4518??2011-10-15?21:50??5_4_11二維復(fù)合矩陣編程實(shí)例\5_4_11二維復(fù)合矩陣編程實(shí)例.dsp
?????文件????????560??2011-10-15?20:25??5_4_11二維復(fù)合矩陣編程實(shí)例\5_4_11二維復(fù)合矩陣編程實(shí)例.dsw
?????文件??????41984??2011-10-15?21:51??5_4_11二維復(fù)合矩陣編程實(shí)例\5_4_11二維復(fù)合矩陣編程實(shí)例.ncb
?????文件??????53760??2011-10-15?21:51??5_4_11二維復(fù)合矩陣編程實(shí)例\5_4_11二維復(fù)合矩陣編程實(shí)例.opt
?????文件????????984??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\5_4_11二維復(fù)合矩陣編程實(shí)例.plg
?????文件?????204932??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\5_4_11二維復(fù)合矩陣編程實(shí)例.exe
?????文件?????221108??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\5_4_11二維復(fù)合矩陣編程實(shí)例.ilk
?????文件?????345960??2011-10-15?21:30??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\5_4_11二維復(fù)合矩陣編程實(shí)例.pch
?????文件?????369664??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\5_4_11二維復(fù)合矩陣編程實(shí)例.pdb
?????文件??????41984??2011-10-15?21:46??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\vc60.idb
?????文件??????45056??2011-10-15?21:43??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\vc60.pdb
?????文件??????13507??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug\三角形旋轉(zhuǎn)縮放平移.obj
?????文件???????4737??2011-10-15?21:43??5_4_11二維復(fù)合矩陣編程實(shí)例\三角形旋轉(zhuǎn)縮放平移.cpp
?????文件???????4737??2011-10-15?21:44??5_4_11二維復(fù)合矩陣編程實(shí)例\新建?文本文檔.txt
?????目錄??????????0??2011-10-15?21:45??5_4_11二維復(fù)合矩陣編程實(shí)例\Debug
?????目錄??????????0??2011-10-15?21:51??5_4_11二維復(fù)合矩陣編程實(shí)例
-----------?---------??----------?-----??----
??????????????1353491????????????????????16
評論
共有 條評論