实验四4梁友栋(共10页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《实验四4梁友栋(共10页).doc》由会员分享,可在线阅读,更多相关《实验四4梁友栋(共10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上计算机图形学 实验报告实验四:梁友栋-Barsky直线裁剪算法学 生: 杨双涛 学 号: 0 班 级: 网络121班 实验时间: 2014.11.27 学 院: 电气与信息工程学院 梁友栋-Barsky直线裁剪算法1.实验目的1、深入理解Liang-Barsky裁剪算法的原理;2、学会使用Liang-Barsky裁剪算法实现对直线段以及多边形的裁剪函数;3、比较Liang-Barsky裁剪算法与Cohen-Sutherland裁剪算法的区别,并动手实现两种算法,体会Liang-Barsky裁剪算法的优势;4、掌握Liang-Barsky裁剪算法的裁剪原理,在理解的基础
2、上动手完成实验任务。2、实验环境Visual C+6.03、实验原理梁友栋与Barsky提出了比Cohen-Sutherland裁剪算法速度更快的直线段裁剪算法。该算法是以直线的参数方程为基础设计的,把判断直线段与窗口边界求交的二维裁剪问题转化为求解一组不等式,确定直线段参数的一维裁剪问题。Liang-Barsky裁剪算法把直线段与窗口的相互位置关系划分为两种情况进行讨论:平行于窗口边界的直线段与不平行与窗口边界的直线段。设起点为P0(x0,y0),终点坐标为P1(x1,y1)的直线段参数方程为:P=P0+t(P1-P0)展开形式为:X=x0+t(x1-x0)Y=y0+t(y1-y0)式中,0
3、 t 1。对于对角点(Wxl,Wyt)、(Wxr,Wyb)的矩形裁剪窗口,直线段裁剪条件如下:Wxl x0+t(x1-x0) WxrWyty0+t(y1-y0) Wyb分解后有:t(x0-x1)x0-Wxlt(x1-x0)Wxr-x0t(y0-y1)y0-Wybt(y1-y0)Wyt-y0将x=x1-x0,y=y1-y0代入上式得到:t*(-x)x0-Wxl t*xWxr-x0 t*(-y)y0-Wyb t*yWyt-y0令:u1=-x,v1=x0-Wxlu2=x,v2=Wxr-x0u3=-y,v3=y0-Wybu4=y,v4=Wyt-y0则统一表示为:t*UnVn,n=1,2,3,4N代表直
4、线段裁剪时,窗口的边界顺序,n=1表示左边界;n=2表示右边界;n=3表示下边界;n=4表示上边界。上式给出了直线段的参数方程裁剪条件。4. 实验内容绘制一个裁剪框,在裁剪框内绘制直线,点击裁剪,实现对直线的裁剪。5. 源程序清单/ TestView.cpp : implementation of the CTestView class/#include stdafx.h#include Test.h#include TestDoc.h#include TestView.h#define ROUND(a) int(a+0.5)/四舍五入#ifdef _DEBUG#define new DEBU
5、G_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)/AFX_MSG_MAP(CTestView)ON_COMMAND(ID_MENUDrawLine, OnMENUDrawLine)ON_COMMAND(ID_MENUClip, OnMENUClip)ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE()/AFX_MSG_MAP/ Standard
6、 printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CTestView construction/destructionCTestView:CTestView()/ TODO: add construction code here/窗口位置坐标wxl=250;wxr=8
7、50;wyb=250;wyt=450;m_Attatch=FALSE;m_i=0;m_Draw=FALSE;CTestView:CTestView()BOOL CTestView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CTestView drawingvoid CTestView:OnDraw(CDC* pDC)CTestDoc* pDoc
8、 = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCRect Rect;GetClientRect(&Rect);/获得客户区的大小CBitmapBitmap,*pBitmap;Bitmap.LoadBitmap(IDB_BITMAP);CDCMemDC;MemDC.CreateCompatibleDC(GetDC();pBitmap=MemDC.SelectObject(&Bitmap);MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),&Pictu
9、re,0,0,SRCCOPY);MemDC.TextOut(ROUND(wxl+wxr)/2),ROUND(wyb-20),窗口);/窗口标题/绘制窗口和直线CPen Pen3,*pOldPen3;/定义3个像素的画笔Pen3.CreatePen(PS_SOLID,3,RGB(0,0,0);pOldPen3=MemDC.SelectObject(&Pen3);MemDC.MoveTo(ROUND(wxl),ROUND(wyt);MemDC.LineTo(ROUND(wxr),ROUND(wyt);MemDC.LineTo(ROUND(wxr),ROUND(wyb);MemDC.LineTo(R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 梁友栋 10
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内