实验一 编实现直线段的裁剪算法.doc

实验一 编实现直线段的裁剪算法.doc

ID:55514473

大小:30.00 KB

页数:7页

时间:2020-05-15

实验一 编实现直线段的裁剪算法.doc_第1页
实验一 编实现直线段的裁剪算法.doc_第2页
实验一 编实现直线段的裁剪算法.doc_第3页
实验一 编实现直线段的裁剪算法.doc_第4页
实验一 编实现直线段的裁剪算法.doc_第5页
资源描述:

《实验一 编实现直线段的裁剪算法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一编程实现直线段的裁剪算法姓名:陈守勇学号:030300810年级:03级班级:计算机六班实验日期:2006.6指导老师:谢伙生一、实验要求1、裁剪算法选用Cohen-Sutherland算法;2、界面设计友好、直观。二、实验环境说明:Windowsxp,VisualC++6.0三、算法与数据结构(程序设计)本裁剪采用了Cohen-Sutherland算法,基本思想如下:将坐标区域分成9个区间,对直线的任一端点(X,Y),根据其坐标所在的区域,赋予一个四位的二进制码D3D2D1D0。编码规则如下:若X

2、,否则D0=0若X>wxl,则D1=1,否则D1=0若Ywyt,则D3=1,否则D3=0然后求出端点P1和P2的编码CODE1和CODE2,若a)code1

3、code2=0则简取之b)code1&code2!=0则简弃之c)若上述两种情况不成立,则按左右下上的顺序求交然后裁剪把线段一分为二然后依次类推。具体算法步骤如下:(1)输入直线段的两端点坐标:P(x1,y1),P(x2,y2),以及窗口的四条边界坐标,wyt,wyb,wxl,wxr。(2)对P1,P2进行编码,点P1的编码为co

4、de1,P2为code2。(3)若code1

5、code2=0,对直线段简取之,若code1 &code2!=0,直线段简弃之,转(7);当以上两条均不满足时,进行步(4)。(4)确保P1在窗口外部:若P1在窗口内,则交换P1,P2的坐标值和编码。(5)按左右上下的顺序检查编码并求出直线段与窗口边界的交点,用该交点的坐标值替换P1的坐标值。也即在焦点,假定为S,S处把线段一分为二,并去掉P1S这一段,转(2)。(6)用直线段少秒转换算法画出当前的直线段P1P2。(7)算法结束。主要程序段:BOOLCMyDlg::OnInitD

6、ialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu

7、(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}SetIcon(m_hIcon,TRUE);SetIcon(m_hIcon,FALSE);CPaintDCdc(this);pic.CreateCompatibleDC(&dc);CBitmap*bp1,*obp1;bp1=newCBitmap;bp1->LoadBitmap(IDB_B);obp1=pic.SelectObject(bp1);obp1->DeleteObjec

8、t();returnTRUE;}voidCMyDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}}voidCMyDlg::OnPaint(){CPaintDCdc(this);if(IsIconic()){SendMessage(WM_ICONERASEBKGND,(WPARAM)

9、dc.GetSafeHdc(),0);intcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;dc.DrawIcon(x,y,m_hIcon);}else{CDialog::OnPaint();}CDCmdc;CBitmapbmp,*bp;bmp

10、.LoadBitmap(IDB_B);mdc.CreateCompatibleDC(GetDC());bp=mdc.SelectObject(&bmp);pic.BitBlt(0,0,500,320,&mdc,0,0,SRCCOPY);mdc.SelectObject(bp);CDC*dc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。