资源描述:
《计算机图形学作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《计算机图形学》实验报告二维几何变换专业:班级:1002学号:姓名:完成日期:2012.10.201.实验目的(1)掌握二维平移、比例、旋转几何变换矩阵。(2)掌握矩阵乘法的编程实现。(3)掌握相对于任意参考点的比例变换和旋转变换。(4)掌握定时器的使用方法。2.实验要求(1)设计包含齐次坐标的二维点类CP2。(2)设计二维几何变换类。平移变换矩阵,比例变换矩阵和旋转变换矩阵。(3)设计双缓冲技术。(4)生成正多边形顶点。(5)绘制几何变换图形。(6)使用定时器动态更新图形。(7)平移变换(x,y)
2、===>(-50,50)之间往复变换。旋转变换绕中心旋转10/帧,比例变换[0.5,2]0.01/帧之间往复变换。3.程序代码CTestView::CTestView(){//TODO:addconstructioncodeheredirectionX=1;directionY=1;directionS=1;R=30;translateX=1;translateY=1;rotate=1;scale=1;}CTestView::~CTestView(){}voidCTestView::DoubleBu
3、ffer(){intflag=0;CDC*pDC=GetDC();CRectrect;if(scale>2)directionS=-1;if(scale<-2)directionS=1;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetVie
4、wportOrg(rect.Width()/2,rect.Height()/2);CDCMemDC;CBitmapNewBitmap,*pOldBitmap;MemDC.CreateCompatibleDC(pDC);NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());pOldBitmap=MemDC.SelectObject(&NewBitmap);MemDC.SetMapMode(MM_ANISOTROPIC);Mem
5、DC.SetWindowExt(rect.Width(),rect.Height());MemDC.SetViewportExt(rect.Width(),-rect.Height());MemDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);ReadPoint();tran.Translate(translateX,translateY);tran.Rotate(rotate,CP2(translateX,translateY));tran.Sca
6、le(scale,scale,CP2(translateX,translateY));DrawObject(&MemDC);BorderCheck();pDC->BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&MemDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);MemDC.SelectObject(pOldBitmap);NewBitmap.DeleteObject()
7、;MemDC.DeleteDC();ReleaseDC(pDC);if(P!=NULL){delete[]P;P=NULL;}}voidCTestView::ReadPoint(){doubleDtheta=2*PI/degree;P=newCP2[degree+1];//staticintx=0;//staticinty=0;for(inti=0;i8、[degree].y=0;tran.SetMat(P,degree+1);}voidCTestView::DrawObject(CDC*pDC){//CLine*line=newCLine;CPenpen(PS_SOLID,1,RGB(255,0,0));pDC->SelectObject(&pen);for(inti=0;iMoveTo(ROUND(P[degree].x),ROUND(P[degree].y));pDC->Lin