当前位置:文档之家› 计算机图形学:第三章 图形标准

计算机图形学:第三章 图形标准

第三章图形标准

3.1 图形标准的分类

建立图形标准的目的是使图形与计算机硬件无关,实现程序的可移植和数据的可交换。

图形标准的分类:

应用程序接口

图形数据交换

3.2 应用程序接口标准

1)GKS(Graphics Kernel System)

1985年,第一个ISO国际计算机图形信息标准,图形核心系统(GKS),正式颁布。

GKS提供了在应用程序和图形输入输出设备之

间的功能接口,定义了一个独立于语言的图形核

心系统。

GKS是一个二维图形标准,使用GKS编制出来

的应用程序可方便地在具有GKS的不同图形系统

之间移植。以后又开发出了三维图形核心系统(GKS-3D)。

2)PHIGS

(Programmer’s Hierarchical Interactive Graphics System)

PHIGS( Programmer's Hierarchical Interactive Graphics System )是ISO于1986年公布的计算机图形系统标准。PHIGS是为具有高度动态性,交互性的三维图形应用而设计的图形软件工具库,其最主要的特点是能够在系统中高效率地描述应用模型,迅速修改图形模型的数据,并能绘制显示修改后的图形模型,它也是在程序与图形设备之间提供了一种功能接口。

3.3 图形数据交换标准

1)CGM (Computer Graphic Metafile)

1980年开始,美国国家标准委员会ANSI和国

际标准化组织ISO专门成立了标准化组着手计算机

图元文件(CGM)标准的制定,并于1987年正式成为ISO标准,

CGM提供了一个在虚拟设备接口上存贮与传输图形数据及控制信息的机制。它具有广泛的适用性,大部分的二维图形软件都能够通过CGM进行信息存贮和交换。CGM标准是由一套标准的与设备无关的定义图形的语法和词法元素组成。

Windows的图元文件(不同于CGM)

windows图元文件是用来表示矢量图形的二进制记录。

它主要用来通过剪贴板在程序之间传递图形数据,也可以存储在硬盘上(*.WMF—Windows Metafile ),它将一组图形命令形成一个矢量绘图文件:

hdcMeta = CreateMetaFile (NULL) //这里是内存

hBrush = CreateSolidBrush (RGB (0, 0, 255)) ;

Rectangle (hdcMeta, 0, 0, 100, 100) ; //画矩形

MoveToEx (hdcMeta, 0, 0, NULL) ;

LineTo (hdcMeta, 100, 100) ;

MoveToEx (hdcMeta, 0, 100, NULL) ;

LineTo (hdcMeta, 100, 0) ;

SelectObject (hdcMeta, hBrush) ;

Ellipse (hdcMeta, 20, 20, 80, 80) ; //包围盒中画椭圆

hmf = CloseMetaFile (hdcMeta) ;

以后可以使用hmf在指定矩形区域中绘图。

2) IGES (Initial Graphics Exchange Specification)

随着CAD/CAM技术的广泛应用,企业间、企业内部不同的职能部门间经常需要进行产品信息的交换,由于CAD/CAM系统的不同,直接影响到设计和制造部门和企业间的产品信息的交换和流动。导致了产品数据交换标准的制订。1980年,由美国国家标准局(NBS:National Bureau of Standards)主持成立了由波音公司和通用电气公司参加的技术委员会,制订了基本图形交换规范IGES,并于1981年正式成为美国的国家标准。

从1981年的IGES 1.0版本到现在的版本,IGES逐渐成熟,日益丰富,包括了实体模型和边界模型,覆盖了CAD/CAM数据交换的越来越多的应用领域。作为较早颁布的标准,IGES被许多CAD/CAM系统接受,成为应用最广泛的数据交换标准。

3)DXF (Drawing Exchange Format )

DXF为AutoCAD系统的图形数据文件,DXF虽然不是标准,但由于AutoCAD系统的普遍应用,使得DXF成为事实上的数据交换标准。DXF是具有专门格式的ASCII码文本文件,它易于被其它程序处理,主要用于实现高级语言编写的程序与AutoCAD系统的连接,或其它CAD系统与AutoCAD系统交换图形文件。

4)STEP(Standard for the Exchange of Product Model Data)

作为数据交换的国际标准IGES发表以后,成为应用最广泛的数据交换标准。但在应用过程中,IGES缺点逐渐暴露出来,不能满足复杂的工业生产数据交换的要求。

1984年,IGES组织设置了一个研究计划,称为PDES(Product Data Exchange Specification)。PDES计划的长期目标是为产品数据交换规范的建立开发一种方法论,并运用这套方法论开发一个新的产品数据交换标准,新标准要求能克服IGES中已经意识到的弱点,这些弱点包括文件过长,处理时间长,一些几何定义影响数值精度,交换的是数据而不是信息。PDES计划与IGES相比的一个显著特点是着重于产品模型信息的交

换而不是象IGES那样仅传递一些几何和图形数据。

1983年国际标准化组织ISO开始制定产品模型数据交换标准。STEP的制定主要基于PDES计划,1988年ISO把美国的PDES文本作为STEP标准的建议草案公布,随后PDES的制定工作并入STEP的制定中,PDES计划从PDES的制定转向STEP标准的应用,PDES也

因此改名为“应用STEP进行产品数据交换(Product Data Exchange using STEP)”。

由于PDES计划和STEP密切相关,习惯上常将两者合在一起为PDES/STEP。

STEP是一个关于产品数据计算机可理解的表示和交换的国际标准,目的是提供一种不依赖于具体系统的中性机制,能够描述产品整个生命周期中的产品数据。产品生命周期包括产品的设计、制造、使用、维护、报废等。产品在各过程产生的信息既多又复杂,而且分散在不同的部门和地方。这就要求这些产品信息以计算机能理解的形式表示,而且在不同的计算机系统之间进行交换时保持一致和完整。产品数据的表达和交换,构成了STEP标准。

2) OpenGL 的 API 结构

3) Windows环境下OpenGL有关库函数

①核心库(OpenGL),包含最基本的函数,其前缀是gl ;这部分函数用于

常规的、核心的图形处理。

②实用库(OpenGL utility library,GLU),包含的函数功能更高一些,如绘

制复杂的曲线曲面、高级坐标变换、多边形分割等,前缀为glu。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。

③实用工具包(OpenGL Utility Toolkit),第三方开发的函数库,函数名前缀

为glut。这些函数用于简单的窗口操作和消息处理,使用它可以不涉及具体的窗口系统。

④WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀为wgl。

它使OpenGL和windows窗口系统紧密结合。

另外,还有五个Win32函数(ChoosePixelFormat,DescribePixelFormat,SetPixelFormat,GetPixelFormat,SwapBuffers)用来处理像素格式和双缓存,它们是对Win32系统的扩展,没有特定前缀。

4)用OpenGL显示一个简单的二维图形

参考工程gl_0_2d

这个程序稍加修改,可以用来完成后面的大部分作业。

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架 (1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

秋双学位计算机图形学

2006年秋双学位计算机图形学作业题目 教材计算机图形学(第二版) 第一次P105 3.17 利用中点算法并考虑对称性,推导在区间-10<=x<=10上,对下列曲线进行扫描转换的有效算法:y=(1/12)*x3 3.20 考虑对称性,建立中点算法对形式为y=ax2-b的任意抛物线进行扫描转换,参数a,b及x的范围从输入值获得。 第二次P106 3.34 利用circle函数,编写一个程序,显示具有合适标记的饼图。程序的输入包括:在某些区间上给定数据分布的数据组,饼图的名称和区间的名称。每部分的标记将是显示在饼图边界外靠近对应饼图部分的地方。 第三次10.7 P139 4.20 编写一个程序,使用指定的图案对给定的椭圆内部进行填充。 第四次10.14 P168 5.12 确定对于任何直线y=mx+b的反射变换矩阵的形式。 第四次10.22 比较若干条相对于裁剪窗口的不同方向的线段的Cohen-Sutherland和梁友栋-Barsky裁剪算法的算术运算次数。 第五次10.29 6.18 将梁友栋-Barsky算法改称多边形裁剪算法。 第六次11.4 8.13 设计一个程序,该程序允许用户使用一个笔画设备交互式地画图。 第七次11.11 10.9 建立一个将给定的球、椭球或圆柱体变成多边形网格的一个算法。 第八次11.18 10.20 给出d=5的均匀周期性B-样条曲线的混合函数。 第九次11.25 11.13 设计关于任选平面反射的例程。 第十次 12.8 编写一个将透视投影棱台变换到规则平行六面体的程序。 上机 1.实现Cohen-Sutherland多边形裁剪算法,要求显示多边形被每一条窗口边裁剪后的结果。 2.编写一个程序,允许用户通过一个基本形状菜单并使用一个拾取设备,将每一个选取的 形状拖曳到指定位置,并提供保存和载入的功能。 3.. 写一篇综述性的调研报告,要求不少于3000字,独立完成。内容可以是计算机图形学理论或算法的研究。如:曲线、曲面拟合算法;几何造型方法的研究。如:分形树、分形山、树木、花草、云、瀑布、粒子系统等等。或任何你感兴趣的领域。 4.2006年秋双学位计算机图形学作业参考答案 P105 3.17 利用中点算法并考虑对称性,推导在区间-10<=x<=10上,对下列曲线进行扫描转换的有效算法:y=(1/12)*x3 解答:第一象限和第三象限中心对称

计算机图形学第三章答案

1. voidLine_Midpoint(int x1, int y1, int x2, int y2, int color) { int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b >= 0 ? 1 : (b = -b, -1)); int cy = (a <= 0 ? 1 : (a = -a, -1)); putpixel(x, y, color); int d, d1, d2; if (-a <= b) // 斜率绝对值 <= 1 { d = 2 * a + b; d1 = 2 * a; d2 = 2 * (a + b); while(x != x2) { if (d < 0) y += cy, d += d2; else d += d1; x += cx; putpixel(x, y, color); } } else // 斜率绝对值 > 1 { d = 2 * b + a; d1 = 2 * b; d2 = 2 * (a + b); while(y != y2) { if(d < 0) d += d1; else x += cx, d += d2; y += cy; putpixel(x, y, color); } } } 7 void Line_Midpoint(int x1, int y1, int x2, int y2, int color, int flag) { intx,y; if(flag==0) { x0=point.x; y0=point.y; flag=1; } else { flag=0; x1=point.x; y1=point.y; a=y0-y1;

计算机图形学实验内容汇总

计算机图形学实验 肖加清

实验一图形学实验基础 一、实验目的 (1)掌握VC++绘图的一般步骤; (2)掌握OpenGL软件包的安装方法; (3)掌握OpenGL绘图的一般步骤; (4)掌握OpenGL的主要功能与基本语法。 二、实验内容 1、VC++绘图实验 (1)实验内容:以下是绘制金刚石图案。已给出VC++参考程序,但里面有部分错误,请改正,实现以下图案。 N=3 N=4

N=5 N=10 N=30

N=50 (2)参考程序 //自定义的一个类 //此代码可以放在视图类的实现文件(.cpp) 里class CP2 { public: CP2(); virtual ~CP2(); CP2(double,double); double x; double y; }; CP2::CP2() { this->x=0.0; this->y=0.0; } CP2::~CP2() { } CP2::CP2(double x0,double y0) { this->x=x0; this->y=y0; }

//视图类的一个成员函数,这个成员函数可以放在OnDraw函数里调用。 //在视图类的头文件(.h)里定义此函数 void Diamond(); //在视图类的实现文件(.cpp)里实现此函数 void CTestView::Diamond() { CP2 *P; int N; double R; R=300; N=10; P=new CP2[N]; CClientDC dc(this); CRect Rect; GetClientRect(&Rect); double theta; theta=2*PI/N; for(int i=0;i #include #include #include //定义输出窗口的大小 #define WINDOW_HEIGHT 300

计算机图形学第二版课后习题答案

第一章绪论 概念:计算机图形学、图形、图像、点阵法、参数法、 图形的几何要素、非几何要素、数字图像处理; 计算机图形学和计算机视觉的概念及三者之间的关系; 计算机图形系统的功能、计算机图形系统的总体结构。 第二章图形设备 图形输入设备:有哪些。 图形显示设备:CRT的结构、原理和工作方式。 彩色CRT:结构、原理。 随机扫描和光栅扫描的图形显示器的结构和工作原理。 图形显示子系统:分辨率、像素与帧缓存、颜色查找表等基本概念,分辨率的计算 第三章交互式技术 什么是输入模式的问题,有哪几种输入模式。 第四章图形的表示与数据结构 自学,建议至少阅读一遍 第五章基本图形生成算法 概念:点阵字符和矢量字符; 直线和圆的扫描转换算法; 多边形的扫描转换:有效边表算法; 区域填充:4/8连通的边界/泛填充算法;

内外测试:奇偶规则,非零环绕数规则; 反走样:反走样和走样的概念,过取样和区域取样。 5.1.2 中点 Bresenham 算法(P109) 5.1.2 改进 Bresenham 算法(P112) 习题答案

习题5(P144) 5.3 试用中点Bresenham算法画直线段的原理推导斜率为负且大于1的直线段绘制过程(要求写清原理、误差函数、递推公式及最终画图过程)。(P111) 解: k<=-1 |△y|/|△x|>=1 y为最大位移方向 故有 构造判别式: 推导d各种情况的方法(设理想直线与y=yi+1的交点为Q): 所以有: y Q-kx Q-b=0 且y M=y Q d=f(x M-kx M-b-(y Q-kx Q-b)=k(x Q-x M) 所以,当k<0, d>0时,M点在Q点右侧(Q在M左),取左点 P l(x i-1,y i+1)。 d<0时,M点在Q点左侧(Q在M右),取右点 Pr(x i,y i+1)。 d=0时,M点与Q点重合(Q在M点),约定取右点 Pr(x i,y i+1) 。 所以有 递推公式的推导: d2=f(x i-1.5,y i+2) 当d>0时, d2=y i+2-k(x i-1.5)-b 增量为1+k =d1+1+k

计算机图形学基础教程习题课1(第二版)(孙家广-胡事民编著)

1.列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 2.常用的图形输出设备是什么? 显示器(CRT、LCD、等离子)、打印机、绘图仪等。 2.常用的图形输入设备是什么? 键盘、鼠标、跟踪球、空间球、数据手套、光笔、触摸屏、扫描仪等。 3.列出3种图形软件工具。 AutoCAD、SolidWorks、UG、ProEngineer、CorelDraw、Photoshop、PaintShop、Visio、3DMAX、MAYA、Alias、Softimage等。 错误:CAD 4.写出|k|>1的直线Bresenham画线算法。 d d d d 设直线方程为:y=kx+b,即x=(y-b)/k,有x i+1=x i+(y i+1-y i)/k=x i+1/k,其中k=dy/dx。因为直线的起始点在象素中心,所以误差项d的初值d0=0。y下标每增加1,d的值相应递增1/k,即d=d+1/k。一旦d≥1,就把它减去1,这样保证d在0、1之间。 ●当d≥0.5时,最接近于当前象素的右上方象素(xi+1,y i+1),x方向加1,d减 去1; ●而当d<0.5时,更接近于上方象素(x i,yi+1)。

为方便计算,令e=d-0.5,e的初值为-0.5,增量为1/k。 ●当e≥0时,取当前象素(x i,y i)的右上方象素(xi+1,y i+1),e减小1; ●而当e<0时,更接近于上方象素(xi,yi+1)。 voidBresenhamline (int x0,int y0,intx1, inty1,int color) { int x,y,dx,dy; float k,e; dx= x1-x0, dy = y1-y0,k=dy/dx; e=-0.5, x=x0, y=y0; for (i=0; i≤dy; i++) {drawpixel(x, y,color); y=y+1,e=e+1/k; if (e≥0) { x++, e=e-1;} } } 4.写出|k|>1的直线中点画线算法。 构造判别式:d=F(M)=F(xp+0.5,y p+1)=a(x p+0.5)+b(yp+1)+c ●当d<0,M在Q点左侧,取右上方P2为下一个象素; ●当d>0,M在Q点右侧,取上方P1为下一个象素; ●当d=0,选P1或P2均可,约定取P1为下一个象素;

计算机图形学实验三报告

计算机科学与通信工程学院 实验报告 课程计算机图形学 实验题目二维图形变换 学生姓名 学号 专业班级 指导教师 日期

成绩评定表

二维图形变换 1. 实验内容 完成对北极星图案的缩放、平移、旋转、对称等二维变换。 提示:首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析

4. 算法设计 程序框架: //DiamondView.h class CDiamondView : public CView { …… public: //参数输入和提示对话框 void Polaris();//北极星 …… }; //DiamondView.cpp void CDiamondView::OnMenuDiamond() { IsCutting = FALSE; if(dlgDiamond.DoModal()==IDOK) DrawDiamond(dlgDiamond.m_nVertex,dlgDiamond.

m_nRadius,100);//调用绘制金刚石的函数 } //北极星 void CDiamondView::Polaris() {......} 5. 源代码 //北极星 void hzbjx(CDC* pDC,long x[18],long y[18]) { CPen newPen1,*oldPen; newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex1[11]={{x[1],y[1]},{x[2],y[2]},{x[3],y[3]},{x[4],y[4]},{x[5],y[5]},{x[3],y[3]},{x[1],y[1]}, {x[6],y[6]},{x[3],y[3]},{x[7],y[7]},{x[5],y[5]}}; pDC->Polyline(vertex1, 11); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(0,255,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}}; pDC->Polyline(vertex2, 5); POINT vertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}}; pDC->Polyline(vertex3, 5);

计算机图形学

计算机图形学 姓名:李倩倩 班级:硕研10-14 学号: 第一题: #include <> #include <> void MidpintLine( HDC hDC,int x0,int y0,int x1,int y1,unsigned long color) { int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=2*a+b; delta1=2*a; delta2=2*(a+b); x=x0; y=y0; SetPixel(hDC,x,y,color); while(x0) xinc=1; else xinc=-1; if(dy>0) yinc=1; else yinc=-1; dx=abs(dx);dy=abs(dy); int x=xs,y=ys; int i=0; if(dx==0&&dy==0) SetPixel(pdc,x,y,color); SetPixel(hDC,x,y,color); else if(dx==0) { for(i=0;i

《计算机图形学》答案,第六章

第六章曲线和曲面 3、参照Hermite三次曲线的几何形式,试用B[P 0 P 1 P u P 1 u P uu P 1 uu]T , 推导相 应五次曲线的调和函数和系数矩阵M。 解:设Hermite五次曲线的几何形式为: P(t)=a5t5 + a4t4 + a3t3 + a2t2 + a1t + a0其中 t∈[0,1] 按题意,已知曲线两端点的坐标值P0 P1 曲线两端点的一阶导数值P0u P1u 曲线两端点的二阶导数值P0uu P1uu 则求出系数a5,a4,a3,a2,a1,a0 则P(t)就可确定; 由于P(t)= a5t5 + a4t4 + a3t3 + a2t2 + a1t + a0其中 t∈[0,1] P’(t)=5a5t4 + 4a4t3 + 3a3t2 + 2a2t + a1 P”(t)=20a5t3+12a4t2+6a3t+2a2 P0=P(0)=a0 P1=P(1)=a5+a4+a3+a2+a1+a0 P0’=P’(0)=a1 P1’=P’(1)=5a5+4a4+3a3+2a2+a1 P0”=P”(0)=2a2 P1”=P”(1)=20a5+12a4+6a3+2a2 所以 a0 = P(0) a1 =P’(0) a2 =P”(0)/2 a3 = 10P(1)- 10P(0) - 4P’(1) - 6P’(0) + P”(1)/2 - 3P”(0)/2 a4 =-15P(1)+ 15P(0) + 7P’(1) + 8P’(0) - P”(1) - 3P”(0)/2 a5 = 6P(1)- 6P(0) - 3P’(1) - 3P’(0) - P”(0)/2 + P”(1)/2 => P(t)=[ -6P(0) + 6P(1) - 3P’(0) - 3P’(1) - P”(0)/2 + P”(1)/2] t5 +[+15P(0) - 15P(1) + 8P’(0) + 7P’(1) + 3P”(0)/2 ] t4 +[-10P(0) + 10P(1) - 6P’(0) - 4P’(1) - 3P”(0)/2 + P”(1)/2] t3 + [ P”(0)/2] t2 + [P’(0)] t +P(0) 整理得: P(t) = (-6t5 + 15t4 - 10t3 + 1) P(0) + (6t5-15t4+10t3) P(1) + (-3t5 + 8t4 -6t3 + t) P’(0) + (-3t5 +7t4-4t3) P’(1) + (-t5/2+ 3t4/2-3t3/2+t2/2) P”(0) + (t5/2-t4+t3/2) P”(1) 故调和函数为: F(0)= -6t5 + 15t4 - 10t3 + 1 F(1)= 6t5 - 15t4 + 10t3 F(2)= -3t5 + 8t4 - 6t3 + t F(3)= -3t5 + 7t4- 4t3 F(4)= -t5/2 + 3t4/2 -3t3/2 + t2/2

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

计算机图形学答案,第七章

习题 2.试证明下述几何变换的矩阵运算具有互换性: (1)两个连续的旋转变换;(2)两个连续的平移变换; (3)两个连续的变比例变换;(4)当比例系数相等时的旋转和比例变换; (1)证明:设第一次的旋转变换为: cosθ1 sinθ1 0 T1= - sinθ1 cosθ1 0 0 0 1 第二次的旋转变换为: Cosθ2 s inθ2 0 T2= - sinθ2 cosθ2 0 0 0 1 则因为 T1*T2 = cosθ1 sinθ1 0 cosθ2 sinθ2 0 - sinθ1 cosθ1 0 - sinθ2 cosθ2 0 0 0 1 0 0 1 = cosθ1 cosθ2+sinθ1 sinθ2 cosθ1 sinθ2+ sinθ1 cosθ2 0 - sinθ1 cosθ2- cosθ1 sinθ2 -sinθ1 sinθ1+ cosθ1 cosθ2 0 0 0 1 Cos(θ1+θ2)sin(θ1+θ2) 0 = - sin(θ1+θ2) cos(θ1+θ2) 0 0 0 1 cosθ2 sinθ2 0 cosθ1 sinθ1 0 T2*T1 = - sinθ2 cosθ2 0 - sinθ1 cosθ1 0 0 0 1 0 0 1

cosθ1 cosθ2+ sinθ1 sinθ2 cosθ1 sinθ2+ sinθ1 cosθ2 0 = - sinθ2cosθ1- cosθ2 sinθ1 -sinθ1 sinθ1+ cosθ1 cosθ2 0 0 0 1 Cos(θ1+θ2)sin(θ1+θ2) 0 = - sin(θ1+θ2) cos(θ1+θ2) 0 0 0 1 即T1*T2= T2*T1, 两个连续的旋转变换具有互换性 (2)证明:设第一次的平移变换为: 1 0 0 T1= 0 1 0 Tx1 Ty1 1 第二次的平移变换为: 1 0 0 T2= 0 1 0 Tx2 Ty2 1 则因为 T1*T2 = 1 0 0 1 0 0 0 1 0 0 1 0 Tx1 Ty1 1 Tx2 Ty2 1 1 0 0 = 0 1 0 Tx1+Tx2 Ty1+Ty2 1 而 T2*T1 = 1 0 0 1 0 0 0 1 0 0 1 0 Tx2 Ty2 1 Tx1 Ty1 1 1 0 0 = 0 1 0

计算机图形学:第三章 图形标准

第三章图形标准 3.1 图形标准的分类 建立图形标准的目的是使图形与计算机硬件无关,实现程序的可移植和数据的可交换。 图形标准的分类: 应用程序接口 图形数据交换

3.2 应用程序接口标准 1)GKS(Graphics Kernel System) 1985年,第一个ISO国际计算机图形信息标准,图形核心系统(GKS),正式颁布。 GKS提供了在应用程序和图形输入输出设备之 间的功能接口,定义了一个独立于语言的图形核 心系统。 GKS是一个二维图形标准,使用GKS编制出来 的应用程序可方便地在具有GKS的不同图形系统 之间移植。以后又开发出了三维图形核心系统(GKS-3D)。

2)PHIGS (Programmer’s Hierarchical Interactive Graphics System) PHIGS( Programmer's Hierarchical Interactive Graphics System )是ISO于1986年公布的计算机图形系统标准。PHIGS是为具有高度动态性,交互性的三维图形应用而设计的图形软件工具库,其最主要的特点是能够在系统中高效率地描述应用模型,迅速修改图形模型的数据,并能绘制显示修改后的图形模型,它也是在程序与图形设备之间提供了一种功能接口。

3.3 图形数据交换标准 1)CGM (Computer Graphic Metafile) 1980年开始,美国国家标准委员会ANSI和国 际标准化组织ISO专门成立了标准化组着手计算机 图元文件(CGM)标准的制定,并于1987年正式成为ISO标准, CGM提供了一个在虚拟设备接口上存贮与传输图形数据及控制信息的机制。它具有广泛的适用性,大部分的二维图形软件都能够通过CGM进行信息存贮和交换。CGM标准是由一套标准的与设备无关的定义图形的语法和词法元素组成。

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

计算机图形学(第三版)孙家广课后习题答案

第一章:P56 1、列出在你过去学习工作中用过与计算机图形学有关的程序c语言: #include main() { int graphdriver = VGA, graphmode=VGAHI; initgraph(&graphdriver,&graphmode,””); setbkcolor(BLUE); setcolor(WHITE); setfillstyle(1,LIGHTRED); bar3d(100,200,400,350,100,1); floodfill(450,300,WHITE); floodfill(250,450,WHITE); setcolor(LIGHTGREEN); rectangle(450,400,500,450); floodfill(470,420,LIGHTGREEN); getch(); closegraph(); } JA V A语言: 例1、画点 Import java.io.*; Class point { int ax; int ay; int bx; int by; public point(int ax, int ay, int bx, int by) { float k ; //计算斜率 float b; k=(by-ay)/(bx-ax); b=ay-ax*k; system.out.println(“直线的方程为:y=”+k+”x”+”+”+b); } } 例2、画矩形 class DrawPanel extends Jpanel { public void paint(Graphics g)

计算机图形学实验一_画直线

大学实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

如果 d<0,则M在理想直线下方,选右上方P1点; 如果 d=0,则M在理想直线上,选P1/ P2点。 由于d是xi和yi的线性函数,可采用增量计算提高运算效率。 1.如由pi点确定在是正右方P2点(d>0).,则新的中点M仅在x方向加1,新的d值为: d new=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a= d old-dy 2.如由pi点确定是右上方P1点(d<0),则新的中点M在x和y方向都增加1,新的d值为 d new=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a+b= d old-dy+dx 在每一步中,根据前一次第二迭中计算出的d值的符号,在正右方和右上方的两个点中进行选择。d的初始值: d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2 F(x0,y0)=0,(x0,y0)在直线上。 为了消除d的分数,重新定义 F(x,y)=2(ax+by+c) 则每一步需要计算的d new 是简单的整数加法 dy=y1-y0,dx=x1-x0 d0=-2dy+dx d new=d old-2*dy,当 d old>=0 d new=d old-2(dy-dx),当d old<0 Bresenham画线算法 算法原理: 与DDA算法 相似,Bresenham 画线算法也要在 每列象素中找到 与理想直线最逼 近的象素点。 根据直线的 斜率来确定变量 在x或y方向递 增一个单位。另 一个方向y或x

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

《计算机图形学实验报告》

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

《计算机图形学》习题

《计算机图形学》习题(中文) 一、填空题: 1.计算机图形学是指使用计算机通过()在显示设备上构造出图形来。答案:算法和程序 2.图象的分辨率指的是在水平和垂直方向上每单位长度所包含的()数目。 答案:象素点 3.计算机图形系统由硬件设备及相应的()两部分组成。 答案:程序系统(软件) 4.阴极射线管主要由3部分组成:电子枪、()和荧光屏。 答案:偏转系统 5.直线的属性包括:()、()和线色。 答案:线型线宽 6.有些情况下屏幕的左上角象素点被认为是屏幕坐标系的原点。当把这个系统下的象素坐标(x,y)转换到以屏幕的左下角点为原点的坐标系下时,假定垂直方向象素点数目为m,则该点的坐标变为( ). 答案: (x,m-y-1) 7.Hermite 曲线是给定曲线段的两个端点坐标以及两端点处的()来描述曲线的。 答案:切线矢量 8.Bezier曲线通过特征多边形的()。 答案:起点和终点 9.交互式图形系统的基本交互任务包括()、()、数值输入及文字输入。 答案:定位选择 10.衡量CRT的重要性能指标分别是分辨率和纵横比。 11.如果屏幕的分辨率是640×480,则如果是一个只能显示黑白图形的显示器,则需要VRAM的大小为:(640×480)/8=38400 bytes≈3.8Kb 12.常用的输入设备:键盘、鼠标。 13.写出颜色分别为红、绿、蓝的RGB值_(255,0,0)、(0,255,0)、(0,0,255)。 14.种子填充算法中内部定义的或边界定义的区域可以分为4连接和 8连接两种连通方式。 15.二维图形旋转变换中,逆时针为正方向顺时针为负方向 二、选择题: 1.经国际标准化组织批准的第一个图形标准是 ( )。 A. 3D CORE B.GKS C. PHIGS D. CKS

相关主题
文本预览
相关文档 最新文档