一.作業(yè)名稱:二維圖形的幾何變換
二.算法分析
以下實(shí)現(xiàn)了二維圖形的空間平移、比例縮放、旋轉(zhuǎn)、對(duì)稱、轉(zhuǎn)位。
平移變換
| | [

旋轉(zhuǎn)變換

放縮變換

l 平移變換只改變圖形的位置,不改變圖形的大小。
l 旋轉(zhuǎn)變換不改變圖形的形狀
l 放縮變換引起圖形形狀的變化。
復(fù)合變換
的結(jié)果與變換的順序有關(guān)(矩陣乘法不可交換)
三.算法實(shí)現(xiàn)
1.平移變換
void CMyView::OnTranslation()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=1;
my1.A[2][2]=1;
my1.A[3][1]=15;
my1.A[3][2]=45;
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
2.旋轉(zhuǎn)變換
void CMyView::OnRotation()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=cos(PI*60);//旋轉(zhuǎn)60度
my1.A[1][2]=sin(PI*60);
my1.A[2][1]=-sin(PI*60);
my1.A[2][2]=cos(PI*60);
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
3.縮放變換
void CMyView::OnScaling()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=5;
my1.A[2][2]=2;
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
4.關(guān)于x軸對(duì)稱
void CMyView::OnMirrorX()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=1;
my1.A[2][2]=-1;
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
5關(guān)于y軸對(duì)稱
void CMyView::OnMirrorY()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=-1;
my1.A[2][2]=1;
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
6.關(guān)于原點(diǎn)對(duì)稱
void CMyView::OnMirrorO()
{
// TODO: Add your command handler code here
int i,j;
CMyClass my1; //構(gòu)造新的CMyClass對(duì)象
//將圖形變換矩陣清零
for ( i=1;i<=3;++i)
{
for ( j=1;j<=3;++j)
my1.A[i][j]=0;
}
//給圖形變換矩陣賦值
my1.A[1][1]=-1;
my1.A[2][2]=-1;
my1.A[3][3]=1;
RedrawWindow();
my1. Display ();
}
四.效果截圖
(一)三角形

1.****平移變換

2.****旋轉(zhuǎn)變換

3.****縮放變換

4.****對(duì)稱
(1)****關(guān)于****X****軸對(duì)稱

(2)****關(guān)于****Y****軸對(duì)稱

(3)****關(guān)于原點(diǎn)對(duì)稱

(二)四邊形
將一四邊形以原點(diǎn)為中心,以150為間隔旋轉(zhuǎn)。
要求: 寫出程序框圖,程序,及運(yùn)行結(jié)果.
