《2022年计算机图形学学习心得.docx》由会员分享,可在线阅读,更多相关《2022年计算机图形学学习心得.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022年计算机图形学学习心得计算机图形学学习心得篇1 一、试验目的 了解梁友栋算法和编码裁剪算法并利用该算法思想实现某一图形或直线段的裁剪,加深对梁友栋算法和编码裁剪算法的理解。 二、试验内容 利用梁友栋算法或编码裁剪算法变成实现对直线段或者任一图形的裁剪。 三、试验原理 梁友栋算法简介如下: 设线段两端点坐标分别为P1和P2,则其参数化直线方程可写成下列形式: 0u1 当u=0时,得点P1,当u=1时,得点P2。线段的裁剪条件可以由下面的不等式表示: Wxlx1uxWxr;Wyby1uyWyt 这四个不等式可以表示为:upkqk k=1,2,3,4 其中,参数p,q定义为: p1-x, q
2、1x1Wxl p2x, q2Wxrx1 p3-y, q3y1Wyb p4y, q4Wyty1 下标k=1,2,3,4分别对应裁剪窗口的左、右、下、上四条边界线。假如线段平行于裁剪窗口的某两边界,则必有相应的pk0,假如还满意qk0,则线段的端点位于窗口外部,即线段在窗口外,应当舍弃。假如qk0,线段在窗口内。当pk0时,直线是从裁剪窗口第k条边界线的外部延长到内部。当pk0时,直线是从裁剪窗口第k条边界线的内部延长到外部。当pk不等于零时,可以计算出线段与第k条裁剪窗口边界线的交点参数: 依据定义,对于每条线段,pk中必有两个小于零,而另两个大于零。对于小于零的pk,直线同第k条裁剪窗口边线是
3、从外到内相遇的,此时假如线段同第k条裁剪窗口边界线有交点的话,是参数u从0变大时遇到的,这时计算出相应的rk值,取0和各个rk值之中的最大值记为u1。与此相反,对于大于零的pk,计算出相应的rk值,取1和各个rk值之中的最小值记为u2。两个参数u1和u2定义了在裁剪窗口内的线段部分。假如u1u2,则线段完全落在裁剪窗口之外,应被舍弃。否则被裁剪线段可见部分的端点由参数u1和u2计算出来。 四、试验环境 Windows XP VisualC+6.0 五、试验步骤 盔入VisualC+6.0环境,在菜单中选择FileNewProjects,然后选择MFCAppWizard新建一个工程文件单击OK,
4、在弹出的对话框中选择Single document,单击Finish,在VisualC+6.0编程界面中选择CMyView单击右键,选择Add Member Function,在弹出的对话框中添写void和函数名。 / 图形裁减View.cpp : implementation of the CMyView class / #include stdafx.h #include 图形裁减.h #include 图形裁减Doc.h #include 图形裁减View.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char
5、 THIS_FILE = _FILE_; #endif / / CMyView IMPLEMENT_DYNCREATE BEGIN_MESSAGE_MAP /AFX_MSG_MAP / NOTE - the ClassWizard will add and remove mapping macros here. / DO NOT EDIT what you see in these blocks of generated code! /AFX_MSG_MAP / Standard printing commands ON_COMMAND ON_COMMAND ON_COMMAND END_ME
6、SSAGE_MAP / / CMyView construction/destruction CMyView:CMyView / TODO: add construction code here CMyView:CMyView BOOL CMyView:PreCreateWindow / TODO: Modify the Window class or styles here by modifying / the CREATESTRUCT cs return CView:PreCreateWindow; / / CMyView drawing void CMyView:OnDraw CMyDo
7、c* pDoc = GetDocument; ASSERT_VALID; LINECLIP; / TODO: add draw code for native data here / / CMyView printing BOOL CMyView:OnPreparePrinting / default preparation return DoPreparePrinting; void CMyView:OnBeginPrinting / TODO: add extra initialization before printing void CMyView:OnEndPrinting / TOD
8、O: add cleanup after printing / / CMyView diagnostics #ifdef _DEBUG void CMyView:AssertValid const CView:AssertValid; void CMyView:Dump const CView:Dump; CMyDoc* CMyView:GetDocument / non-debug version is inline ASSERT); return m_pDocument; #endif /_DEBUG / / CMyView message handlers void CMyView:LI
9、NECLIP /运用梁友栋-Basky直线裁剪算法 CDC* pDC=GetDC;/取得绘图设备环境上下文指针 /设置不同颜色画笔 CPen newpen1);/窗口颜色 CPen newpen2);/待裁剪线段颜色 CPen newpen3);/裁剪后可见线段颜色 /协助变量 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; pDC-Rectangle; x1=100;
10、y1=200; x2=600; y2=400; /绘制被裁剪线段 pDC-SelectObject; pDC-MoveTo; pDC-LineTo; /计算 dx=x2-x1; dy=y2-y1; p0=-dx; p1=dx; p2=-dy; p3=; q0=; q1=; q2=; q3=; for if )/垂直或水平线段,由不为0的另外两个参数确定可见部分 uk=1000; else rk=qk/pk; if uk=?0:rk;/取用0与rk中的大值 else uk=?rk:1;/取用1与rk中的小值 /参数在0-1之间改变,超出为无效参数 u1=0.0; u2=1.0; for if u
11、1=?uk:u1;/取用0与uk中的大值 else u2= /计算可见部分线段 x0=; y0=; x3=; y3=; /绘制窗口内可见线段 pDC-SelectObject; pDC-MoveTo; pDC-LineTo; 六、试验结果与分析 本图中矩形内紫色线段为裁剪之后可见线段,外部的黑色线段部分为带裁剪部分。 七、试验中遇到的问题及解决方法 1.对于VisualC+6.0的工程文件即:MFC的环境不熟识,起先时编写视图View下的程序在步骤上尚有困难,不知道该怎样运用该环境,再参考了一些相关书籍和求教于其他人之后,这个问题得到了解决。 2.最初只是在后面添加了自编程序,并没有在OnDr
12、aw里面加入该程序的调用,程序编译没有错误,但运行后只是一个窗口,并没有图像,后来在同学的帮助下发觉了这个错误,改正后程序顺当运行。 3.程序编写过程中的语法不再是问题,间或有疏忽的时候,编译时一般就能改正了。 4.在程序编写时对于点的坐标值不是很留意,随意定义了一些点,造成直线画到了图形的外面。 计算机图形学学习心得篇2 酒算机图形学是利用计算机探讨图形的表示、生成、处理和显示的科学。简洁地说,计算机图形学的主要探讨内容就是探讨如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色调、线型、线宽等非几何属性组成。从处理技
13、术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。经过30多年的发展,计算机图形学已成为计算机科学中最为活跃的分支之一,并得到广泛的应用。 在科技高度发展的今日,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,更好的学习计算机图形学。因此,C语言对我们计算机图形学的学习尤其重要,而我们也须要肯定的C语言基础学问。 在这个学期里,我们班级的学生在计算机图形学老师何老师的带领下进行了计算机图形学的上机实践学习。在这之前,我们已经对C语言这门课程学习了一个学期
14、,对其有了肯定的了解和驾驭,这对我们计算机图形的学习打下了良好的基础。但是,万事开头难,在计算机图形学的上机实践的过程中还是遇到了一些问题。 上机试验是学习计算机图形学必不行少的实践环节,上课学习到的学问都须要通过C语言编程做出程序来真正驾驭它。对于计算机图形学的学习目的,可以概括为图形的表示、图形的生成、图形的处理和显示,这些都必需通过充分的事实上机操作才能完成。我们上机试验总共包括七个, 每个试验之前老师都会给我们做具体的介绍,详细的操作步骤老师也给了一个参考书,这样的话,我们在上机过程中也省去了许多麻烦,节约了许多时间。因此,我们才有了充裕的时间来理解试验原理,并结合自己的想象力,编写出
15、属于自己的程序。 学习计算机图形学除了课堂讲授以外,必需保证有不少于课堂讲授学时的上机时间。因为学时所限,课程支配在周四晚上统一上机试验,所以我们须要有效地利用上机试验的机会,尽快驾驭理解计算机图形学的基础学问,为今后的接着学习打下一个良好的基础。课程上机试验的目的,不仅仅是验证教材和讲课的内 容、检查自己所编的程序是否正确,课程支配的上机试验的目的可以概括为如下几个方面: 居深对课堂讲授内容的理解 课堂上要讲授很多关于计算机图形学的学问和原理,听起来非常味同嚼蜡,也不简单记住,死记硬背是不行取的。然而要运用C程序这个工具解决实际学习中的问题,通过多次上机练习,在理解的基础上就会自然而然地驾驭
16、计算机图形学图形生成的算法和处理方式。对于一些内容自己认为在课堂上听懂了,但上机实践中会发觉原来理解的偏差,编写出来的程序无法运行,这是由于大部分学生C语言基础只是不够坚固的缘由。 学习计算机图形学不能停留在学习它的程序语言,而是利用学到的学问编写C语言程序来验证自己的想法,深化理解图形生成的原理,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否驾驭C语言、自己编写的程序是否能够正确运行、对计算机的理解是否到位。 通过上机试验来验证自己编制的程序是否正确,唯恐是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是肯定要克服的传统
17、的、错误的想法。因为在这种思想支配下,可能你会想方法去掩盖程序中的错误,而不是尽可能多地发觉程序中存在的问题。而且计算机图形学上机试验是依附在C语言编程基础之上的,我们对图形生成算法的理解要通过C程序才能体现出来。 通过这次为数不多的几天计算机实践学习,我们巩固了一些关于C语言的学问,理解了我们计算机图形学的理论学问,这对我们将来到社会工作将会有莫大的帮助。同时它让我知道计算机图形的强大和奇丽之处,虽然我们学的都是基本的生成算法,但是通过老师展示的几个计算机图形学高级程序,我们才了解到计算机图形学可以做出特别华丽的视觉效果,而且只要你努力,任何东西都不会太难。 最终,还是很庆幸能学到计算机图形
18、学这样的一门课程,在学习本课程的同时,已经涉及了许多的学科,让我们更有实力成为全方位、多特色的新世纪人才。编程实力、思维实力都获得了提高,真是一举多得。 计算机图形学学习心得篇3 酒算机图形学是20世纪60年头以后,随着计算机技术的发展和完善而形成的一门新兴学科。至今,计算机图形学已在建筑,机械,电子,造船,航空,汽车,轻工,广告,艺术等领域得到了广泛的应用。可以说,它几乎影响了全部涉及领域,冲击和变更着传统的设计模式。一打开计算机,人们首先接触到的就是计算机图形学的内容,因为计算机的用户界面已广泛运用了计算机图形技术。事实上,计算机图形技术已深化到各个领域。计算机图形的生成一般包括两种方法:
19、程序绘图和交互绘图。所谓程序绘图,就是先用计算机语言编好绘图程序,然后运行该程序并绘出图形。而交互绘图则是应用交互式图形软件,通过交互吩咐由计算机生成图形。程序绘图是交互式绘图的基础。 掘单地说,计算机图形学的主要探讨内容就是探讨如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色调、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。 计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感
20、图形。为此,必需建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机协助几何设计有着亲密的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的探讨内容。同时,真实感图形计算的结果是以数字图像的方式供应的,计算机图形学也就和图像处理有着亲密的关系。 这学期我们主要学习了MFC图形编程,学习了 VC+图形程序设计基础。从中学习了如何建立MFC项目和简洁的输入与输出。 三视图即主视图、俯视图、侧视图是分别将三维立体对正面、水平面和侧面作正投影得到的三个基本视图。 用计算机绘制立体图的三视图
21、的详细步骤: 卡立三维空间坐标系,这里定义一个右手直角坐标系,即z轴正向朝上。在这个定义的坐标系下,确定三维立体上各点的位置坐标,同时引入 齐次坐标。 求出所作变换相应的四阶变换矩阵,一般依据变换前后图形上点的几何关系或由已知的变换矩阵求得。 揩所作变换写出矩阵表示式,通过运算求得三维立体上各点竟变换后的相应点或或,一般是二维点的齐次坐标。 有变换后的全部二维点绘出三维立体投影后的平面图形,即为主视图、俯视图或侧视图。 在右手直角坐标系中,将三维立体向xOz面作正投影,得到主视图。由投影变换前后三维立体上点到主视图上点的关系,可知此投影变换的变换矩阵为: 10 Tv=0 0 000000100
22、001 Tv:主视图的投影变换矩阵,简称投影矩阵。 若已知三维立体上 n 个点,则各点的齐次坐标可写成 n4 阶矩阵,主视图的投影变换矩阵表示式为: x1y1z111000x10z11x0z1 x2y2z21220000= 0010 xyz10001x0z1nnnnn 在绘图时,只要取x=xi , y=zi ,就可在屏幕上绘出三维立体的主视图 三维立体向xOy面作正投影得到俯视图。 其投影变换矩阵: 1000 0100 T=0000 0001 为了使俯视图与主视图也画在一个平面内,就要使H面绕x轴负方向转90o,此旋转变换矩阵为: 100000-10 Tx= 0100 0001 为了使俯视图与
23、主视图间有肯定的间距,还要使H面沿负z方向平移一段距离z0。其变换矩阵为: 1000 0100 T=0010 00-z01 因此俯视图的投影变换矩阵为上面三个变换矩阵的连乘积,即: 100010001000 T=TTT=0100 00-100100Hx000001000010 00-z1000100010 1000 00-10 =0000 00-z1 0 俯视图的投影变换矩阵表示为: x1y1z11x101xyz11000x01 2220220-102 =0000 00-z1 0xnynzn1xn01 由此得到三维立体的俯视图上n个点 ,取x=xi , y=-yi-z0,便可绘出三维立体的俯视
24、图。 揩三维立体向yOz面作正投影得到俯视图。 其投影变换矩阵: 0000 0100 T=0010 0001为了使俯视图与主视图都画在一个平面内,就要使W面绕z轴转90o,此旋转变换矩阵为: 0100-1000Tz=00100001 第3 / 4页 为了使侧视图与主视图间有肯定的间距,还要使W面沿负x方向平移一段距离x0。其变换矩阵为: 10000100 T= 0010 -x0001 因此侧视图的投影变换矩阵为上面三个变换矩阵的连乘积,即: 0000010010000100-10000100 Tw= 001000100010 00010001-x0001 0000 -1000 = 0010 -
25、x0010 x1y1z110z11 0000xyz10z1 2222 -100020= 0010 -x0010 xnynzn10zn1 由此得到三维立体的侧视图上n个点 ,取x= -yi-x0, y=-zi,便可绘出三维立体的侧视图。 先让三维立体作投影面,然后旋转投影面得到平摊在同一个平面上的三个视图。也可以先把三维立体作旋转,然后再向投影面作正投影得到同样的三视图。 通过这这们课的学习,让我对计算机的应用有了更新的相识,对于图形学中基本图形的生成算法有了肯定的了解,图形学是计算机科学与技术学科的活跃前沿学科,被广泛的应用到生物学、物理学、化学、天文学、地球物理学、材料科学等领域。我深深感到这门学科涉及的领域之广是惊人的,可以说博大精深。在这个计算机的时代什么都要用到计算机技术,图形也是我们生活中重要的部分,好学好图形学为我以后的就业课成学习及新兴科学技术的运用打下了坚实基础。更为我以后的就业打下了坚实的良好基础,使我对将来充溢了信念。感谢向华萍老师对我们的仔细指导。 第20页 共20页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页第 20 页 共 20 页
限制150内