计算机图形学学习心得.doc
《计算机图形学学习心得.doc》由会员分享,可在线阅读,更多相关《计算机图形学学习心得.doc(45页珍藏版)》请在三一办公上搜索。
1、计算机图形学学习心得计算机图形学学习心得篇1一、实验目的了解梁友栋算法和编码裁剪算法并利用该算法思想实现某一图形或直线段的裁剪,加深对梁友栋算法和编码裁剪算法的理解。二、实验内容利用梁友栋算法(参数化线段裁剪算法)或编码裁剪算法变成实现对直线段或者任一图形的裁剪。三、实验原理梁友栋算法简介如下:设线段两端点坐标分别为P1(x1,y1)和P2(x2,y2),则其参数化直线方程可写成下列形式:0≤u≤1当u=0时,得点P1,当u=1时,得点P2。线段的裁剪条件可以由下面的不等式表示: Wxl≤x1uΔx≤Wxr;Wyb≤y1uΔy≤Wyt
2、这四个不等式可以表示为:upk≤qk k=1,2,3,4其中,参数p,q定义为:p1-Δx, q1x1Wxlp2Δx, q2Wxrx1p3-Δy, q3y1Wybp4Δy, q4Wyty1下标k=1,2,3,4分别对应裁剪窗口的左、右、下、上四条边界线。如果线段平行于裁剪窗口的某两边界,则必有相应的pk0,如果还满足qk<0,则线段的端点位于窗口外部,即线段在窗口外,应该舍弃。如果qk≥0,线段在窗口内。当pk<0时,直线是从裁剪窗口第k条边界线的外部延伸到内部。当pk>0时,直线是从裁剪窗口第k条边界线的内部延伸到
3、外部。当pk不等于零时,可以计算出线段与第k条裁剪窗口边界线的交点参数: 根据定义,对于每条线段,pk中必有两个小于零,而另两个大于零。对于小于零的pk,直线同第k条裁剪窗口边线是从外到内相遇的,此时如果线段同第k条裁剪窗口边界线有交点的话,是参数u从0变大时遇到的,这时计算出相应的rk值,取0和各个rk值之中的最大值记为u1。与此相反,对于大于零的pk,计算出相应的rk值,取1和各个rk值之中的最小值记为u2。两个参数u1和u2定义了在裁剪窗口内的线段部分。如果u1>u2,则线段完全落在裁剪窗口之外,应被舍弃。否则被裁剪线段可见部分的端点由参数u1和u2计算出来。四、实验环境Windo
4、ws XP VisualC+6.0五、实验步骤进入VisualC+6.0环境,在菜单中选择“FileàNewàProjects”,然后选择“MFCAppWizard(exe)”新建一个工程文件单击“OK”,在弹出的对话框中选择“Single document”,单击“Finish”,在VisualC+6.0编程界面中选择CMyView单击右键,选择“Add Member Function”,在弹出的对话框中添写“void”和函数名。/ 图形裁减View.cpp : implementation of the CMyView class/#include stdafx
5、.h#include 图形裁减.h#include 图形裁减Doc.h#include 图形裁减View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CView)BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView)/ NOTE - the ClassWizard will add and remove mapping macros h
6、ere./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSG_MAP/ Standard 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()/ CMyView construction/d
7、estructionCMyView:CMyView()/ TODO: add construction code hereCMyView:CMyView()BOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMyView drawingvoid CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc
8、= GetDocument();ASSERT_VALID(pDoc);LINECLIP();/ TODO: add draw code for native data here/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initializ
9、ation before printingvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-
10、debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:LINECLIP()/使用梁友栋-Basky直线裁剪算法CDC* pDC=GetDC();/取得绘图设备环境上下文指针/设置不同颜色画笔CPen newpen1(PS_SOLID,0,RGB(183,198,0);/窗口颜色CPen newpen2(PS_SOLID,0,RGB(0,
11、0,1);/待裁剪线段颜色CPen newpen3(PS_SOLID,0,RGB(160,1,255);/裁剪后可见线段颜色/辅助变量float p4,q4,u4;float u1,u2,r4;int x1,y1,x2,y2,x0,y0,x3,y3;int dx,dy,k;int wxl=300,wxr=450,wyb=100,wyt=400;/绘制裁剪窗口pDC->SelectObject(&newpen1);pDC->Rectangle(wxl,wyt,wxr,wyb);x1=100;y1=200;x2=600;y2=400;/绘制被裁剪线段pDC->Select
12、Object(&newpen2);pDC->MoveTo(x1,y1);pDC->LineTo(x2,y2);/计算dx=x2-x1;dy=y2-y1;p0=(float)-dx;p1=(float)dx;p2=(float)-dy;p3=(float)(dy);q0=(float)(x1-wxl);q1=(float)(wxr-x1);q2=(float)(y1-wyb);q3=(float)(wyt-y1);for(k=0;k<4;k+)if (pk=0)/垂直或水平线段,由不为0的另外两个参数确定可见部分uk=1000;elserk=qk/pk;if(pk<
13、;0)uk=(0>rk)?0:rk;/取用0与rk中的大值elseuk=(rk<1)?rk:1;/取用1与rk中的小值/参数在0-1之间变化,超出为无效参数u1=0.0;u2=1.0;for(k=0;k<4;k+)if(pk<0)u1=(uk>u1)?uk:u1;/取用0与uk中的大值elseu2=(uk/满足条件为可见部分线段if(u1<=u2)/计算可见部分线段x0=(int)(x1+u1*dx);y0=(int)(y1+u1*dy);x3=(int)(x1+u2*dx);y3=(int)(y1+u2*dy);/绘制窗口内可见线段pDC->Sele
14、ctObject(&newpen3);pDC->MoveTo(x0,y0);pDC->LineTo(x3,y3);六、实验结果与分析本图中矩形内紫色线段为裁剪之后可见线段,外部的黑色线段部分为带裁剪部分。七、实验中遇到的问题及解决方法1.对于VisualC+6.0的工程文件即:MFC的环境不熟悉,开始时编写视图View下的程序在步骤上尚有困难,不知道该怎样使用该环境,再参考了一些相关书籍和求教于其他人之后,这个问题得到了解决。2.最初只是在后面添加了自编程序,并没有在“OnDraw”里面加入该程序的调用,程序编译没有错误,但运行后只是一个窗口,并没有图像,后来在同学的帮助下
15、发现了这个错误,改正后程序顺利运行。3.程序编写过程中的语法不再是问题,偶尔有疏忽的时候,编译时一般就能改正了。4.在程序编写时对于点的坐标值不是很注意,随意定义了一些点,造成直线画到了图形的外面。计算机图形学学习心得篇2计算机图形学是利用计算机研究图形的表示、生成、处理和显示的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗
16、图,也就是通常所说的真实感图形。经过30多年的发展,计算机图形学已成为计算机科学中最为活跃的分支之一,并得到广泛的应用。在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,更好的学习计算机图形学。因此,C语言对我们计算机图形学的学习尤其重要,而我们也需要一定的C语言基础知识。在这个学期里,我们班级的学生在计算机图形学老师何老师的带领下进行了计算机图形学的上机实践学习。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解和掌握,这对我们计算机图形的学习打下了良好的基础。但是,万事开头难,在计算机图形学的上机
17、实践的过程中还是遇到了一些问题。上机实验是学习计算机图形学必不可少的实践环节,上课学习到的知识都需要通过C语言编程做出程序来真正掌握它。对于计算机图形学的学习目的,可以概括为图形的表示、图形的生成、图形的处理和显示,这些都必须通过充分的实际上机操作才能完成。我们上机实验总共包括七个, 每个实验之前老师都会给我们做详细的介绍,具体的操作步骤老师也给了一个参考书,这样的话,我们在上机过程中也省去了很多麻烦,节约了很多时间。因此,我们才有了充裕的时间来理解实验原理,并结合自己的想象力,编写出属于自己的程序。学习计算机图形学除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程安
18、排在周四晚上统一上机实验,所以我们需要有效地利用上机实验的机会,尽快掌握理解计算机图形学的基础知识,为今后的继续学习打下一个良好的基础。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:加深对课堂讲授内容的理解课堂上要讲授许多关于计算机图形学的知识和原理,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C程序这个工具解决实际学习中的问题,通过多次上机练习,在理解的基础上就会自然而然地掌握计算机图形学图形生成的算法和处理方式。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,编写出来的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 学习心得

链接地址:https://www.31ppt.com/p-4662466.html