计算机图形学实验报告
计算机图形学实验报告4

计算机图形学实验报告4一、实验目的本次计算机图形学实验旨在深入了解和掌握计算机图形学中的一些关键概念和技术,通过实际操作和编程实现,提高对图形生成、变换、渲染等方面的理解和应用能力。
二、实验环境本次实验使用的软件环境为_____,编程语言为_____,硬件环境为_____。
三、实验内容1、二维图形的绘制使用基本的绘图函数,如直线、矩形、圆形等,绘制简单的二维图形。
通过设置线条颜色、填充颜色等属性,增强图形的表现力。
2、图形的几何变换实现图形的平移、旋转和缩放操作。
观察不同变换参数对图形的影响。
3、三维图形的生成构建简单的三维模型,如立方体、球体等。
应用光照和材质效果,使三维图形更加逼真。
四、实验步骤1、二维图形的绘制首先,在编程环境中导入所需的图形库和相关模块。
然后,定义绘图窗口的大小和坐标范围。
接下来,使用绘图函数按照指定的坐标和参数绘制直线、矩形和圆形。
最后,设置图形的颜色和填充属性,使图形更加美观。
2、图形的几何变换对于平移操作,通过修改图形顶点的坐标值来实现水平和垂直方向的移动。
对于旋转操作,根据旋转角度计算新的顶点坐标,实现图形的绕中心点旋转。
对于缩放操作,将图形的顶点坐标乘以缩放因子,达到放大或缩小图形的效果。
3、三维图形的生成首先,定义三维模型的顶点坐标和三角形面的连接关系。
然后,设置光照的位置、颜色和强度等参数。
接着,为模型添加材质属性,如颜色、反射率等。
最后,使用渲染函数将三维模型显示在屏幕上。
五、实验结果与分析1、二维图形的绘制成功绘制出了各种简单的二维图形,并且通过颜色和填充的设置,使图形具有了更好的视觉效果。
例如,绘制的矩形和圆形边缘清晰,颜色鲜艳,填充均匀。
2、图形的几何变换平移、旋转和缩放操作都能够准确地实现,并且变换效果符合预期。
在旋转操作中,发现旋转角度的正负会影响旋转的方向,而缩放因子的大小直接决定了图形的缩放程度。
3、三维图形的生成生成的三维模型具有一定的立体感和真实感。
计算机图形学第五次实验报告

《计算机图形学》实验报告实验十一真实感图形一、实验教学目标与基本要求初步实现真实感图形, 并实践图形的造型与变换等。
二、理论基础运用几何造型, 几何、投影及透视变换、真实感图形效果(消隐、纹理、光照等)有关知识实现。
1.用给定地形高程数据绘制出地形图;2.绘制一(套)房间,参数自定。
三. 算法设计与分析真实感图形绘制过程中, 由于投影变换失去了深度信息, 往往导致图形的二义性。
要消除这类二义性, 就必须在绘制时消除被遮挡的不可见的线或面, 习惯上称之为消除隐藏线和隐藏面, 或简称为消隐, 经过消隐得到的投影图称为物体的真实图形。
消隐处理是计算机绘图中一个引人注目的问题, 目前已提出多种算法, 基本上可以分为两大类:即物体空间方法和图象空间方法。
物体空间方法是通过比较物体和物体的相对关系来决定可见与不可见的;而图象空间方法则是根据在图象象素点上各投影点之间的关系来确定可见与否的。
用这两类方法就可以消除凸型模型、凹形模型和多个模型同时存在时的隐藏面。
1).消隐算法的实现1.物体空间的消隐算法物体空间法是在三维坐标系中, 通过分析物体模型间的几何关系, 如物体的几何位置、与观察点的相对位置等, 来进行隐藏面判断的消隐算法。
世界坐标系是描述物体的原始坐标系, 物体的世界坐标描述了物体的基本形状。
为了更好地观察和描述物体, 经常需要对其世界坐标进行平移和旋转, 而得到物体的观察坐标。
物体的观察坐标能得到描述物体的更好视角, 所以物体空间法通常都是在观察坐标系中进行的。
观察坐标系的原点一般即是观察点。
物体空间法消隐包括两个基本步骤, 即三维坐标变换和选取适当的隐藏面判断算法。
选择合适的观察坐标系不但可以更好地描述物体, 而且可以大大简化和降低消隐算法的运算。
因此, 利用物体空间法进行消隐的第一步往往是将物体所处的坐标系转换为适当的观察坐标系。
这需要对物体进行三维旋转和平移变换。
常用的物体空间消隐算法包括平面公式法、径向预排序法、径向排序法、隔离平面法、深度排序法、光线投射法和区域子分法。
计算机图形学实验报告

计算机图形学实验报告
实验目的:通过本次实验,深入了解并掌握计算机图形学的基本原理和相关技术,培养对图形处理的理解和能力。
实验内容:
1. 图像的基本属性
- 图像的本质及表示方法
- 像素和分辨率的概念
- 灰度图像和彩色图像的区别
2. 图像的处理技术
- 图像的采集和处理
- 图像的变换和增强
- 图像的压缩和存储
3. 计算机图形学的应用
- 图像处理在生活中的应用
- 计算机辅助设计中的图形学应用
- 三维建模和渲染技术
实验步骤和结果:
1. 在计算机图形学实验平台上加载一张测试图像,分析其像素构成
和基本属性。
2. 运用图像处理技术,对测试图像进行模糊、锐化、色彩调整等操作,观察处理后的效果并记录。
3. 学习并掌握计算机图形学中常用的处理算法,如卷积、滤波等,
尝试应用到测试图像上并进行实验验证。
4. 探讨计算机图形学在数字媒体制作、虚拟现实、计算机辅助设计
等领域的应用案例,并总结其在实践中的重要性和价值。
结论:
通过本次实验,我对计算机图形学有了更深入的了解,掌握了图像
处理技术的基本原理和应用方法。
计算机图形学作为一门重要的学科,对多个领域有着广泛的应用前景,有助于提高数字媒体技术、虚拟现
实技术等领域的发展水平。
希望在未来的学习和工作中能进一步深化
对计算机图形学理论和实践的研究,不断提升自己在这一领域的专业
能力和创新意识。
计算机图形学实验报告

计算机图形学 实验报告实验一:二维线画图元的生成实验目的:掌握直线段的生成算法,并用C/WIN-TC/VC++实现算法,包括中点法生成直线,微分数值法生成直线段等。
实验内容:用不同的方法生成斜率不同的直线段,比较各种方法的效果。
Bresenham 算法的思想Bresenham 画法与中点法相似,都是通过每列象素中确定与理想直线最近的像素来进行直线的扫描的转换的。
通过各行、各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的像素。
该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只需要检查一个误差项的符号,就可以确定该列的所有对象。
1.1方法一:直线的中点算法 算法的主要思想:讨论斜率k ∈[1,+∞)上的直线段的中点算法。
对直线01p p ,左下方的端点为0p (x0,y0),右上方的端点为1p (x1,y1)。
直线段的方程为: y m x B =+⇔yy x B x y y x x B x∆=+⇔∆=∆+∆∆ (,)0F x y xy yx xB ⇔=∆-∆-∆= 现在假定已求得像素(,,i r i x y ),则如图得,,11(,]22i i r i r x x x ∈-+ 由于直线的斜率k ∈[1,+∞),故m=1/k ∈(0,1],则1,,13(,]22i i r i r x x x +∈-+ 在直线1i y y =+上,区间,,13(,]22i r i r x x -+内存在两个像素NE 和E 。
根据取整原则,当11(,)i i x y ++在中点M 11(,)2i i x y ++右方时,取像素NE ,否则取像素E ,即,11,,1()()01()()0i r i i r i r i x E F M x x x NE F M x +++⎧⇔≤=⎨+⇔>⎩i i 点当(,y +1)在左方时点当(,y +1)在右方时若取2()i d F M =,则上式变为 ,1,,()01(0i r i i r i r i x E d x x NE d +⎧≤=⎨+>⎩点当点)当计算i d 的递推公式如下:,11,12[(2)()]0122(,2)0122[(2)(1)]2i i r i i i i i i i rx y y x xB d d F x y d x y y x xB ++⎧∆+-∆+-∆⎪≤⎪=++=⎨>⎪∆+-∆++-∆⎪⎩=202()i i i i d xd d x y d +∆≤⎧⎨+∆-∆>⎩算法的初始条件为:00,00,0(,)(0,0)12(,1)22r r x y x y d F x y x y =⎧⎪⎨=++=∆-∆⎪⎩ 相应的程序示例:建立成员函数:void MidPointLine4(CDC*pDC,int x0,int y0,int x1,int y1,int color) { /*假定x0<x1,直线斜率m>1*/int dx,dy,incrE,incrNE,d,x,y; dx=x1-x0; dy=y1-y0; d=2*dx-dy; incrE=2*dx;incrNE=2*(dx-dy); x=x0;y=y0;pDC->SetPixel(x,y,color); while (x<x1) {if (d<=0) d+=incrE; else{ d+=incrNE; x++; } y++;p->SetPixel(x,y,color);} }编写OnDraw 函数:void CMy1_1View::OnDraw(CDC* pDC) { CMy1_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here MidPointLine4(pDC,200,200,300,300,RGB(0,0,0)); MidPointLine4(pDC,300,200,400,300,RGB(0,0,0)); MidPointLine4(pDC,400,200,500,300,RGB(0,0,0)); }编译运行程序得到如下结果:1.2方法二:直线的数值微分法 算法的主要思想:由于课本上已经给出了斜率m ∈[-1,1]上的算法,故此处给出斜率m ∈[1,+∞〕上的算法,m ∈(-∞,-1]上的可同理推导。
《计算机图形学》实验报告

《计算机图形学》实验报告一、实验目的计算机图形学是一门研究如何利用计算机生成、处理和显示图形的学科。
通过本次实验,旨在深入理解计算机图形学的基本原理和算法,掌握图形的生成、变换、渲染等技术,并能够运用所学知识解决实际问题,提高对图形学的应用能力和编程实践能力。
二、实验环境本次实验使用的编程语言为 Python,使用的图形库为 Pygame。
开发环境为 PyCharm。
三、实验内容1、直线的生成算法DDA 算法(Digital Differential Analyzer)Bresenham 算法DDA 算法是通过计算直线的斜率来确定每个像素点的位置。
它的基本思想是根据直线的斜率和起始点的坐标,逐步计算出直线上的每个像素点的坐标。
Bresenham 算法则是一种基于误差的直线生成算法。
它通过比较误差值来决定下一个像素点的位置,从而减少了计算量,提高了效率。
在实验中,我们分别实现了这两种算法,并比较了它们的性能和效果。
2、圆的生成算法中点画圆算法中点画圆算法的核心思想是通过判断中点的位置来确定圆上的像素点。
通过不断迭代计算中点的位置,逐步生成整个圆。
在实现过程中,需要注意边界条件的处理和误差的计算。
3、图形的变换平移变换旋转变换缩放变换平移变换是将图形在平面上沿着指定的方向移动一定的距离。
旋转变换是围绕一个中心点将图形旋转一定的角度。
缩放变换则是改变图形的大小。
通过矩阵运算来实现这些变换,可以方便地对图形进行各种操作。
4、图形的填充种子填充算法扫描线填充算法种子填充算法是从指定的种子点开始,将相邻的具有相同颜色或属性的像素点填充为指定的颜色。
扫描线填充算法则是通过扫描图形的每一行,确定需要填充的区间,然后进行填充。
在实验中,我们对不同形状的图形进行了填充,并比较了两种算法的适用情况。
四、实验步骤1、直线生成算法的实现定义直线的起点和终点坐标。
根据所选的算法(DDA 或Bresenham)计算直线上的像素点坐标。
计算机图形学实验报告

实验结果与结论
• 在本次实验中,我们成功地实现了复杂场景的渲染,得到了具有较高真实感和视觉效果的图像。通过对比 实验前后的效果,我们发现光线追踪和着色器的运用对于提高渲染质量和效率具有重要作用。同时,我们 也发现场景图的构建和渲染脚本的编写对于实现复杂场景的渲染至关重要。此次实验不仅提高了我们对计 算机图形学原理的理解和实践能力,也为我们后续深入研究渲染引擎的实现提供了宝贵经验。
2. 通过属性设置和变换操作,实现了对图形的定 制和调整,加深了对图形属性的理解。
4. 实验的不足之处:由于时间限制,实验只涉及 了基本图形的绘制和变换,未涉及更复杂的图形 处理算法和技术,如光照、纹理映射等。需要在 后续实验中进一步学习和探索。
02
实验二:实现动画效果
实验目的
掌握动画的基本原 理和实现方法
04
实验四:渲染复杂场景
实验目的
掌握渲染复杂场景的基本流程和方法 理解光线追踪和着色器在渲染过程中的作用
熟悉渲染引擎的实现原理和技巧 提高解决实际问题的能力
实验步骤
• 准备场景文件 • 使用3D建模软件(如Blender)创建或导入场景模型,导出为常用的3D格式(如.obj或.fbx)。 • 导入场景文件 • 在渲染引擎(如Unity或Unreal Engine)中导入准备好的场景文件。 • 构建场景图 • 根据场景的层次结构和光照需求,构建场景图(Scene Graph)。 • 设置光照和材质属性 • 为场景中的物体设置光照和材质属性(如漫反射、镜面反射、透明度等)。 • 编写渲染脚本 • 使用编程语言(如C或JavaScript)编写渲染脚本,控制场景中物体的渲染顺序和逻辑。 • 运行渲染程序 • 运行渲染程序,观察渲染结果。根据效果调整光照、材质和渲染逻辑。 • 导出渲染图像 • 将渲染结果导出为图像文件(如JPEG或PNG),进行后续分析和展示。
图形学 实验报告

图形学实验报告一、实验介绍图形学是计算机科学中的一个重要领域,主要研究计算机图形的生成、显示和处理。
本次实验旨在通过学习图形学的基本概念和算法,深入理解计算机图形的原理与应用。
二、实验内容本次实验主要包含以下内容:1. 图形学的基本概念和历史发展2. 图形学中常用的几何变换和投影算法3. 光栅化算法及其在图形渲染中的应用4. 着色和光照模型的原理及实现方法5. 三维场景建模与渲染技术三、实验步骤和结果1. 图形学的基本概念和历史发展首先我们了解了图形学的基本概念和历史发展。
图形学起源于20世纪60年代,当时主要用于计算机辅助设计(CAD)和计算机辅助制造(CAM)领域。
随着计算机技术的不断发展,图形学逐渐应用于计算机图形的显示和处理领域。
2. 几何变换和投影算法接下来我们学习了图形学中常用的几何变换和投影算法。
几何变换包括平移、旋转和缩放等操作,通过改变图形的位置、角度和尺寸,实现对图形的变换和组合。
投影算法主要用于将三维空间中的图形投影到二维屏幕上,实现透视效果。
3. 光栅化算法及其应用在图形渲染中,光栅化算法是非常常用的技术。
光栅化算法将连续的几何图形转化为离散的像素,实现图形在屏幕上的显示。
常见的光栅化算法包括扫描线算法和边界填充算法。
4. 着色和光照模型的原理与实现为了实现真实感的图形渲染,着色和光照模型是不可或缺的。
着色模型描述了在光照条件下物体表面的颜色,常见的着色模型包括平面着色模型和高洛德着色模型。
光照模型则描述了光线在物体表面的反射和折射过程,常见的光照模型包括冯氏光照模型和布林-菲菲尔德模型。
5. 三维场景建模与渲染技术最后我们学习了三维场景建模与渲染技术。
三维场景建模主要包括建立三维模型和场景的几何结构信息。
三维渲染技术则是将建模得到的三维场景转换为可显示的二维图像。
四、实验总结通过本次实验的学习,我们深入了解了图形学的基本概念和算法。
图形学在计算机图形的生成、显示和处理中具有重要应用,对于计算机科学专业学生来说,学习图形学是必不可少的。
计算机图形学实验报告

计算机图形学实验二维填充图的生成1. 图元填充利用多种图元填充的方法绘制一面五星红旗。
方法有: 扫描转换多边形的逐点判断法(编码算法), 扫描线算法, 区域填充的扫描线算法, 自创的向内复制边法。
1.1说明:1.1.1 宏定义和类型定义:#define max 400#define pi 3.14159265#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define false 0#define true 1#define ok 1#define error 0#define infeasible -1#define overflow -2typedef int Status;typedef int bool;typedef struct {int y,xLeft,xRight;}SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;typedef struct Edge{int ymax;float x,deltax;struct Edge *nextEdge;}Edge;Edge *EL[max];typedef struct{float x,y;}point;Status SetStackEmpty(SqStack *s){s->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!s->base) return overflow;s->top=s->base;s->stacksize=STACK_INIT_SIZE;return ok;}Status PushStack(SqStack *s,SElemType e){if(s->top-s->base>=s->stacksize){s->base=(SElemType*)(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s->base) return error;s->top=s->base+s->stacksize;s->stacksize+=STACKINCREMENT;}*s->top++=e;return ok;}Status PopStack(SqStack *s,SElemType *e){ if(s->top==s->base) return error;*e=*(--s->top);return ok;}Status IsStackEmpty(SqStack *s){if(s->base==s->top) return true;else return false;}1.1.2其他由于要填充五角星, 我们就要得到五角星的十个顶点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机图形学》实验报告学号:0908610211姓名:宋雪英班级:计算机0961项目:1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
2.利用方形、线性两种画刷来绘制圆和椭圆。
3.实现交互式二维图形的放缩,旋转和对称变换2012年12月25日基本图形的生成技术一、实验目的在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。
所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。
本次实验的目的就是利用Bresenham 算法和中心画线法两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
利用方形、线性两种画刷来绘制圆和椭圆。
实现交互式二维图形的放缩,旋转和对称变换。
二、实验任务1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
2.利用方形、线性两种画刷来绘制圆和椭圆。
3.实现交互式二维图形的放缩,旋转和对称变换。
三、画直线的实验内容任务一:利用其它两种画直线方法实现放大10陪显示方法交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
1、设计思路第一步:建立DDAMouseLine工程文件;第二步:向视图类中添加自定义的成员变量用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。
proctected :CPoint m_p1; //起点CPoint m_p2; //起点CPoint m_p; //点击鼠标时点的取值第三步:向视图类中添加自定义的成员函数原型:public:V oid DDAMouseLine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color);Line()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。
第四步:在视图类CPP文件的构造函数中初始化成员变量。
视图类的构造函数名与该视图类的名字相同。
在视图类中选择构造函数,如:CDDAMouseLineView(),并赋值:m_p1.x=100; m_p1.y=100; //起点m_p.x=100;m_p.y=100;m_p2.x=600; m_p2.y=400; //终点第五步:在视图类的OnDraw()函数中加入下列代码,画出网格,实现视图绘图。
//画网格int gi,gj;//画横线pDC->TextOut(90,90,"(100,100)");pDC->MoveTo(100,100);for(gj=100;gj<=400;gj=gj+10){pDC->MoveTo(100,gj);pDC->LineTo(600,gj);}//画竖线pDC->MoveTo(100,100);for (gi=100;gi<=600;gi=gi+10){pDC->MoveTo(gi,100);pDC->LineTo(gi,400);}pDC->TextOut(590,410,"(600,400)");pDC->SelectStockObject(NULL_BRUSH);第六步:向视图类中添加鼠标OnLButtonDown()函数消息响应函数OnLButtonDown(UINT nFlags, CPoint point);在鼠标处理函数中,point参数代表鼠标热点处的坐标位置,point.x为横坐标,point.y为纵坐标。
默认坐标原点(0,0)位于窗口的左上角。
由于应用程序要求自动捕获鼠标事件,因此应当采用Windows事件处理函数,而不是成员函数。
if (m_p.x<=m_p2.x && m_p.y <= m_p2.y){pDC->SetPixel(m_p.x,m_p.y,RGB(255,0,0));pDC->Ellipse(m_p.x-5,m_p.y-5,m_p.x+5,m_p.y+5);}m_p.x=m_p.x+10;m_p.y=m_p.x*0.6+40;m_p.y=(int)((m_p.y+5)/10)*10;//将从(100,100)以10为单位,计算出直线上各个像素位置。
pDC->SetPixel(m_p.x,m_p.y,RGB(255,0,0));pDC->Ellipse(m_p.x-5,m_p.y-5,m_p.x+5,m_p.y+5);//调用自定义的成员函数,用鼠标画直线。
2、实验效果及分析分析:先在OnDraw()函数中画出网格,再在鼠标OnLButtonDown()函数中获取像素值并放大10陪,用DDAMouseLine()函数用Bresenham算法和中心画线算法画出放大10陪的直线。
四、绘制圆和椭圆实验内容任务二:利用方形、线性两种画刷来绘制圆和椭圆创建一个单文档应用程序DrawShapeTest创建一个单文档应用程序DrawShapeTest,单击“画图”菜单,选择“画椭圆”,客户区窗口显示出一个椭圆图案;选择“画圆”,客户区窗口显示出一个圆形。
1、设计思路第一步:使用Visual C++6.0,创建一个单文档应用程序DrawShape 。
第二步:单击Recourse View 视图,选择MENU 项,双击其下的IDR_MAINFRAME 选项,打开菜单资源编辑器,添加主菜单“绘图”,添加子菜单如图1所示。
右键单击菜单项,设置菜单属性,在Menu Item Properties 对话框的Caption 框中输入菜单名称,在ID 框中输入菜单相应的ID 值, 设置菜单属性如表1-1所示。
添加子菜单如图1第三步:按Ctrl+W 打开类向导ClassWizard 对话框,在CDrawShapeTestView 视图类中,分别为ID 值为:ID_RECT 、ID_OVAL 、ID_PLOYGON 的三个菜单项添加COMMAND 消息函数如图2所示,当用户选中相应菜单项时,会执行对应消息的表1-1 设置菜单属性 ID 菜单标题 属性 — 绘图 选中Pop-up -线性画刷 选中Pop-up _ 方形画刷选中Pop-up ID_TOUY1(2)画椭圆(&R)默认 画圆(&C) 默认函数体。
图2 添加消息函数对话框第四步:依次对每个函数单击Edit Code按钮,分别添加菜单的消息函数CMainFrame::OnYuan1()//画圆CMainFrame::OnYuan2()//画圆CMainFrame::OnTuoy1()//画椭圆CMainFrame::OnTuoy2()//画椭圆首先定义两个画刷CBrush *oldBrush,newBrush;newBrush.CreateHatchBrush(HS_CROSS,RGB(0,255,0)); //创建一个绿色的方形新画刷。
newBrush.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0) ;//创建一个绿色的线形新画刷oldBrush=dc.SelectObject(&newBrush);//将新画刷赋给旧画刷。
dc.Ellipse(190,200,290,300) ; ; // 绘制绿色线性圆形dc.Ellipse(150,180,340,260);//画绿色线性椭圆dc.Ellipse(190,200,290,300)//画绿色方形圆dc.Ellipse(50,80,240,160); //画绿色方形椭圆dc.SelectObject(oldBrush); // 恢复系统默认的画刷注意:在DrawShapeTestView.cpp文件头部添加如下语句:#include"math.h"#define pi 3.14159262、实验效果及分析分析:在Recourse View视图中,选择MENU项,双击其下的IDR_MAINFRAME选项,打开菜单资源编辑器,添加主菜单“画图(&D)”,添加子菜单。
再在函数void CDrawShapeView::OnYUAN()//画圆void CDrawShapeView::OnTUOY()//画椭圆中定义两个画刷newBrush.CreateHatchBrush(HS_CROSS,RGB(0,255,0));//创建一个绿色的方形新画刷。
newBrush.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0);//创建一个绿色的线形新画刷利用画圆和画椭圆函数.Ellipse来画出圆和椭圆五、二维图形的放缩,旋转和对称变换实验内容任务三:实现交互式二维图形的放缩,旋转和对称变换1、设计思路第一步:建立DDAMouseLine工程文件;第二步:向视图类中添加自定义的成员变量用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。
proctected :int MaxX,MaxY;//屏幕x和y的最大坐标double P[4][3];//变换点double TM[3][3];//平移变换矩阵double TS[3][3];//比例变换矩阵double TR[3][3];//旋转变换矩阵double TF[3][3];//反射变换矩阵double OSquare[4][3]; //矩形坐标int ntype;第三步:单击Recourse View视图,选择MENU项,双击其下的IDR_MAINFRAME选项,打开菜单资源编辑器,添加主菜单“绘图(&D)”和“变换(&T)”,在主菜单“绘图(&D)”下添加子菜单“画矩形”,在主菜单“变换(&T)”下添加子菜单“平移”、“旋转”、“缩放”、“对称”。
在分别在子菜单“平移”、“旋转”、“缩放”、“对称”下添加子菜单“向上”、“向下”、“向左”、“向右”“顺时针”、“逆时针”、“放大”、“缩小”、“X轴”、“Y轴”、“原点”。
生成函数分别为:void CTranView::OnMENUAnticlockwise()//逆时针旋转。
在逆时针旋转时调用Trotate(-30)函数逆时针旋转30度void CTranView::OnMENUClockwise()//顺时针旋转在顺时针旋转时调用Trotate(30)函数顺时针旋转30度void CTranView::OnMENUIncrease()//放大比例在放大比例时调用Tscale(2,2)函数,X、Y分别放大2陪。