华中农业大学实验报告 实验课程:计算机图形学 实验时间:2010年12月20日 专业班级: 学号: 姓名: 一、 试验名称:二维裁剪 二、 试验目的:在二维观察中,需要在观察坐标系下对窗口进行裁剪,即只保留窗口内的那部分图形,去掉窗口外的图形。二维裁剪是用计算机生成图形最基本的技能,通过本实验使学生掌握如何用计算机进行二维裁剪并熟悉开发环境。 三、 实验原理: 算法源代码: void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here Point FrameLT,FrameRB; Point P[5]; FrameLT.x=150;FrameLT.y=150; FrameRB.x=320;FrameRB.y=320; pDC->Rectangle((int)FrameLT.x,(int)FrameLT.y,(int)FrameRB.x,(int)FrameRB.y); for(int i = 0; i < 5; i++) { P[i].x = (float)(260 + 150*cos(72*i*PI/180) +0.5); P[i].y = (float)(260 + 150*sin(72*i*PI/180) +0.5); } 华中农业大学实验报告 实验课程:计算机图形学 实验时间:2010年12月20日 专业班级: 学号: 姓名: pDC->MoveTo((int)P[0].x,(int)P[0].y); pDC->LineTo((int)P[2].x,(int)P[2].y); pDC->LineTo((int)P[4].x,(int)P[4].y); pDC->LineTo((int)P[1].x,(int)P[1].y); pDC->LineTo((int)P[3].x,(int)P[3].y); pDC->LineTo((int)P[0].x,(int)P[0].y); } void CMyView::Code(Point FrameLT,Point FrameRB,Point P,unsigned char *Flag) { unsigned char flag=0; if(P.xFrameRB.x) flag+=2; if(P.y>FrameRB.y) flag+=4; if(P.y