搜档网
当前位置:搜档网 › 计算机图形学实验报告及代码

计算机图形学实验报告及代码

计算机图形学实验报告及代码
计算机图形学实验报告及代码

第 1 章概述

一、教学目标

通过本章的学习,使学生能够了解计算机图形学的基本概念、研究内容;当前的发展概况;本门课程的特点和应用。

二、教学要求

1.了解计算机图形学的概念和研究内容;

2.了解本门课程的发展概况。

三、教学内容提要

1. 计算机图形学的研究内容

2. 计算机图形学发展概况

3. 计算机图形学特点和应用

4. 计算机图形学当前研究的课题

5. 计算机图形生成和输出的流水线

四、教学重点、难点及解决方法

本章将主要围绕计算机图形学的基本概念进行介绍,介绍研究内容;当前的发展概况;本门课程的特点和应用等等。

五、课时安排

2学时

六、教学设备

多媒体

七、检测教学目标实现程度的具体措施和要求

通过课堂提问的方式来检测学生对基本概念的掌握程度。

八、教学内容

1.1 计算机图形学的研究内容

计算机图形学(Computer Graphics): 研究通过计算机将数据转换为图形,并在专用显示设备上显示的原理、方法和技术的学科。

计算机图形表现形式

(1).线条式(线框架图)

用线段来表现图形,容易反映客观实体的内部结构,如各类工程技术中结构图的表示,机械设计中零件结构图及电路设计中的电路原理图等。具有面模型、色彩、浓淡和明暗层次效应,适合表现客观实体的外形或外貌,如汽车、飞机、轮船等的外形设计以及各种艺术品造型设计等。

(2).真实感面模型图形

跑车靓照

计算机图形分类(空间)

(1).二维图形(2D):在平面坐标系中定义的图形

(2).三维图形(3D):在三维坐标系中定义的图形

计算机图形产生方法

(1).矢量法(短折线法)

任何形状的曲线都用许多首尾相连的短直线(矢量)逼近。

(2).描点法(像素点串接法)

每一曲线都是由一定大小的像素点组成

计算机绘图方式:

(1)交互式绘图

允许操作者以某种方式(对话方式或命令方式)来控制和操纵图形生成过程,使得图形可以边生成、边显示、边修改,直至符合要求为止。如AUTOCAD等

(2)被动式绘图

图形在生成过程中,操作者无法对图形进行操作和控制。如C语言绘图

图形的操作与处理方法(Picture Manipulation)

如图形的开窗、裁剪、平移、旋转、放大、缩小、投影等各种几何变换操作的方法及其

软件或硬件实现技术。

图形信息的存储,检索与交换技术:如图形信息的各种表示方法、组织形式、存取技术、图形数据库的管理、图形信息通信等。

人机交互及用户接口技术:如新型定位设备、选择设备的研究;各种交互技术,如构造技术、命令技术、选择技术、响应技术等的研究,以及用户模型、命令语言、反馈方法、窗口系统等用户接口技术的研究。

1.2 计算机图形学发展概况

1962年美国麻省理工学院林肯实验室的Ivan E·Suthland,首先提出了“计算机图形学”(Computer Graphics)这一术语,引入了分层存储符号的数据结构,开发出了交互技术;可用键盘和光笔实现定位、选项和绘图。奠定了计算机图形学基础。

60年代中期美国、英国、法国的一些汽车、飞机制造业大公司对计算机图形学开展大规模研究。

60年代后期出现了存储管式显示器,可以进行简单交互。

1.3 计算机图形学特点和应用

特点:

1.计算机产生的图形有规律、光滑。它是按数学方法产生的,规矩整齐,有着像数学一样的严格性。

2.计算机产生的图形纯净美观、无噪声干扰。

3.通过计算机产生的图形不仅能描绘客观世界的各种对象,也能描绘纯粹是想像的主观世界中的各种对象。

4.交互式计算机图形显示可由用户控制,产生的图形可修改性强,且速度快、差错少。

应用领域:

1.计算机辅助设计(CAD)和计算机辅助制造(CAM)计算机图形学被用来进行土建工程、机械结构和产品的设计,包括设计飞机、汽车、船舶的外形和发电厂、化工厂等的布局,也能够对电子线路或电子器件进行设计。

2.事务管理中交互式绘图

绘制事务管理中的各种图形,如统计数据的二维及三维图形、直方图、线条图、表示百分比的扇形图等等,还可绘制工作进程图,库存和生产进程图以及大量的其他图形。所有这些都以简明的形式呈现出数据的模型和趋势以增加对复杂现象的理解并促进决策的制定。

3.地理信息系统(GIS)

地理信息系统是建立在地理图形基础上的信息管理系统,是图形技术、数据库技术以及管理信息的结合。

4.办公自动化和电子出版技术

图形显示技术在办公自动化和事务处理中的使用,有助于数据及其相互关系的有效表达,因而有利于人们进行正确的决策。利用交互式图形显示技术的支持可以进行资料、文稿、书刊、手册的编写、修改。制图、制表、分页、排版。

5.计算机辅助教学(CAI)

计算机辅助教学系统利用图形显示设备或电视终端,可以有声有色生动地演示物理、化学、生物、外语等教学内容,让学生(用户)使用人机交互手段,进行学习和研究,绘图或仿真操作,使整个教学过程直观形象,有利于加深理解所学知识。

6.过程控制

在过程控制中,常常将计算机与现实世界中的其他设备连成一个系统。计算机图形显示设备常用来显示系统中关键部位的状态,如炼油厂、发电厂的状态显示器可显示出由传感器送来的压力、温度、电压、电流等数据,从而使操作人员可对异常情况作出反应。

1.4 计算机图形学当前研究的课题

1.造型技术

研究的是如何在计算机中构造出二维、三维物件模型的基本方法和手段。

2.三维信息重建技术

研究一些算法,使得计算机图形系统能自动地将三视图转换成相应的立体图。

3.图形数据库

研究如何以基本的图形为数据项而建立起一个能快速查找各个图形的图形库。

4.动态绘图

在交互式绘图中,不仅可以在屏幕上对图形进行修改、删除、编辑等,还可以进行动态分析。

5.CG、CAD、CAM三者一体化

计算机图形学(CG)、计算机辅助设计(CAD)和计算机辅助制造(CAM)有机结合在一起,形成所谓一体化软件。

6.应用软件开发环境的通用化和标准化

用户界面管理系统UIMS、窗口管理系统、网络文件格式等,并使之通用化和标准化。

7.虚拟现实环境的生成(Virtual Reality简称VR)

利用计算机生成一种模拟环境(如飞机驾驶舱、操作现场等),通过多种传感、设备使用户“投入”到该环境中,实现用户与该环境直接进行自然交互的技术。

8.科学计算可视化

通过对空间数据场构造中间几何图素或用图形绘制技术在屏幕上产生二维图像。

1.5 计算机图形学生成和输出的流水线

再谈矢量法和描点法

矢量法-向量图形-简单图形-计算机绘图命令-向量图

描点法-点阵图形-复杂图形-文件存储大小-位图

比较:几条自由曲线构成的图形和一幅有炫彩动物的卡通图形

(1) 点阵图形点的信息;

(2) 向量图形的尺寸变化;

九、作业

课后习题

十、本章小结

在本章中,对计算机图形学的基本概念和研究内容进行了概述,对发展概况和应用领域进行了说明。

第2章计算机图形系统

一、教学目标

通过对本章的学习,要求熟悉计算机图形系统的组成/各种图形显示器、图形输入/输出设备。

二、教学要求

1、了解计算机图形系统的组成;

2、了解计算机图形输入/输出设备的种类。

三、教学内容提要

1.计算机图形系统的组成

2.计算机图形显示器

3.计算机图形输入设备计算机图形输出设备

4.图形核心系统(GKS)简介

5. 通用图形软件简介

四、教学重点、难点及解决方法

重点是熟悉计算机图形系统的组成/各种图形显示器、图形输入/输出设备。

五、课时安排

4学时

六、教学设备

课堂教学

七、检测教学目标实现程度的具体措施和要求

通过课堂提问的方式来检测学生对基本概念的掌握程度。

八、教学内容

2.1 计算机图形系统的组成

一. 图形系统的结构

由硬件和软件两部分组成。

二.图形系统的基本功能及其硬件性能要求

计算机图形系统至少应具有以下五个方面基本功能:

1.计算功能

(1)形体设计和分析方法的程序库,描述形体的图形数据库。

(2)坐标的平移、旋转、投影、透视等几何变换程序库的数据库。

(3)曲线、曲面生成和图形相互关系的检测库。

2.存储功能

在计算机内存储器和外存储器中,应能存放各种形体的几何数据及形体之间相互关系,可实现对有关数据的实时检索以及保存对图形的删除、增加、修改等信息。

3.输入功能

由图形输入设备将所设计的图形形体的几何参数(例如大小、位置等)和各种绘图命令输入到图形系统中。

4.输出功能

图形系统应有文字、图形、图像信息输出功能。在显示屏幕上显示设计过程当前的状态以及经过图形编辑后的结果。同时还能通过绘图仪、打印机等设备实现硬拷贝输出,以便长期保存。

5.对话功能

可通过显示器或其他人-机交互设备直接进行人-机通信,对计算结果和图形,利用定位、拾取等手段进行修改,同时对设计者或操作员执行的错误给予必要的提示和帮助。

为了实现以上功能,对图形系统的硬件性能要求是:

1.处理速度

图形系统的处理速度既与图形系统硬件有关,也与图形软件的图形处理算法有关。

2.存储容量

存储容量包括三部分:内存储容量、显存、外部存储容量和显示缓冲区容量。

3. 处理精度

处理精度主要是指图形采集输入质量和显示输出质量:这里主要指图形分辨率、图形色彩的显示等。而且很大一部分与所采用的图形处理软件有关。

三.图形系统分类及硬件工作平台要求

1.计算机图形系统的分类

根据其硬件配置和信息传递方式分为:

(1) 脱机绘图系统

将输入图形数据在主机内进行处理

将图形处理后的图形数据送入中间介质,用磁盘或磁带控制绘图输出机输出图形

脱机绘图系统是将图形数据和图形输出分别进行处理,避免计算机处于等待状态,加快计算机的工作效率。

(2) 联机绘图系统

将输入图形数据在主机内进行处理

计算机将图形处理信息直接送给绘图机输出图形,不需要中间介质(磁盘或磁带)传递绘图信息,处理时间缩短了。但由于绘图机是机械速度,这样造成了计算机对绘图机等待,降低了计算机工作效率。

(3) 交互式绘图系统

绘图系统将处理结果输出到图形终端(图形显示器)或图形工作站。用户对所显示图形还可用定位、拾取和描绘等设备进行编辑和标注等。

2.计算机图形系统的硬件工作平台

目前,计算机图形系统的硬件平台有如下几种:

(1).微型计算机(简称微机)

随着微型计算机性能进一步提高,用微型计算机实现三维形体的设计及显示能力在不断提高。

(2).工作站

实际上是一类超级微型计算机,该系统主要用于工程设计,为研究、开发提供一整套软硬件工作环境支持。工作站是具有高速的科学计算、丰富的图形处理、灵活的窗口及网络管理功能的交互式计算机系统。美国的SUN、SGI、HP、DEC、IBM等公司均生产此类产品。

(3).中、小型计算机

一般在特定的部门、单位和应用领域中采用此类环境。它是大型信息系统建立的重要环境,这种环境中信息和数据的处理量是很大的,要求机器有极高的处理速度和极大的存储容量。

(4).大型机

以大型计算机为基础,具有容量庞大的存储器和极强的计算功能,大量的显示终端及高精度、大幅面的硬拷贝设备。还往往拥有自行开发的、功能齐全的应用软件系统。例如,美国第三大汽车公司(CHRYSLER汽车公司)就拥有庞大的计算机系统来进行计算机辅助设计、实体造型、结构分析、运动模拟、工程和科学计算、项目管理、生产过程控制等。

(5).计算机网络

计算机网络是指将上述四类计算机平台,或者其中某一类通过某种互联技术彼此连接,按照某种通信协议进行数据传输、数据共享、数据处理的多机工作环境。

它的特点是多种计算机相连,可以充分发挥各个机器的性能和特点,以达到很高的性能价格比。

网络图形系统要考虑的关键问题是网络服务器的性能,图形数据的通信、传输、共享以及图形资源的利用问题。

2.2 计算机图形显示器

1. CRT单色显示原理

电子枪

灯丝加热阴极,阴极表面向外发射自由电子,控制栅控制自由电子是否向荧光屏发出,电子流在到达屏幕的途中,被加速、聚焦成很窄的电子束,由偏转系统产生电子束的偏转电场(或磁场),使电子束左右、上下偏转,在指定时刻在屏幕指定位置上产生亮点。

余辉时间:电子束离开光点后光点保持的时间。

屏幕刷新:荧光亮度随着时间按指数衰减,整个画面必须在每一秒钟内重复显示许多次,人们才能看到一个稳定而不闪烁的图形,因此必须重复地使荧光质发光,即驱使电子束迅速回到同一点。

要保持一幅画面的稳定性,若余辉时间越短,则所需的屏幕输刷新率越高。影响刷新率的最主要因素是显示器的带宽。

荧光粉的质量直接影响到CRT成像效果。

电视

(刷新率低,与其电路相关)

由于影片播放时画面经常切换,一般采用短余辉的荧光粉。若采用长余辉的荧光粉,则会使上一帧图像余辉保留时间过长而出现拖尾和花屏(马赛克)现象

电脑

(刷新率高)

由于电脑画面一般较为稳定,同一帧画面停留时间较长,所以采用与电视相比较长余辉的荧光粉。如果一帧电脑画面停留时间很长,那么需要保证一定的刷新频率才能使该画面不闪烁不变暗

什么是灰度?

灰度就是亮度,简单说就是色彩的深浅程度,在黑白两色中,灰度体现于黑与白的中间状态,也就是灰色。

纯黑(用0表示),纯白(用15表示)

假设总共有16种灰度也就是16种亮度

随箭头越来越亮

那么在彩色变换中同样有灰度的概念,例如R、G、B三种原色,每种原色都有一个灰度值。若一种原色有16种灰度,那么该原色要占4位,256种灰度,那么该原色要占8位R、G、B三种原色若各有4位,则总共可显示的彩色数目为212种,也即是16×16×16种两点提示:

(1)彩色图片的色彩变换也叫灰度变换或者色阶变换,R、G、B三种原色按任何比例增强再混合。

(2)在ACDSee或PhotoShop等图片工具栏中选择灰度一项,实际上就是将彩色图像转换为只有黑白两色的灰度图像,但和黑白图像还是不同。

一幅(彩色)图片中,由于各部分的颜色细节不同因而导致各部分的灰度等级不同,这种现象我们称之为“多级灰度”。

多级灰度

提高加速电压后,电子束速度增加,穿透绿色荧光层,显示绿色。电子束速度较低时,轰击荧光屏的能量只能使表层红色荧光粉受激励,产生红色亮点

通过改变电子束电压,就可调节电子束穿透荧光粉层的厚度,从而改变红绿两种发光亮度的比例,合成不同的颜色,因此,可显示红、橙、黄、绿四种颜色。

(2).荫罩式彩色CRT

显示的色彩要比穿透式彩色CRT宽广得多。在荧光屏内壁上分别由红(R)、绿(G)、蓝(B)三种颜色的荧光粉涂成百万个荧光粉点,按RGB顺序分行交替排列成三角形状且相距很近

它们发出三种色彩时分辨不清三种原色,而形成一种颜色

荫罩的金属板,板上按三角形状钻有40~50万小圆孔。前罩式CRT管内按三角形排列安装三个电子枪,发射三条电子束,它们由一个共同偏转系统控制

三条电子束聚焦于荫罩板上的小孔中且相距很近。荫罩的作用是使三条电子束分离开来,分别轰击到三种颜色的荧光点上,调节各个电子枪的电流强度,就可改变相应颜色荧光点的亮度,即合成色中所占比例,达到改变成色的色彩

图形显示系统的类型

根据其电子束轰击屏幕的方式和组成结构可分为三种:随机扫描式显示系统、存储管式显示系统和光栅扫描式显示系统。

技术指标:

分辨率的高低:现在一般在1024×1024以上

显示图形的颜色的种数:现在一般为真彩色32位

1.随机扫描式显示系统

要显示的图形由计算机处理成为显示器的显示指令(或称显示文件)。图形控制器取出缓冲存储器或固定存储器中的显示指令,依次执行。由管头控制电路使电子束以按所要的亮度偏转到指定位置,从而得到图形。利用电子束在荧光屏上扫描的轨迹画图。显示指令中的亮度、位移量等数字信息经过线产生器的处理转换为控制电子束产生偏转和明暗的物理量,也就是电流和电压。固定存储器中则存放各种常用字符、数字等的显示指令,显示指令经接口电路送到显示器的缓冲存储器。为了获得稳定的画面,必须不断地重复扫描显示文件(即刷新),速度通常为每秒重复扫描25~50次,即每秒25~50帧左右

优点:

能实时地进行数字-视频转换,实现动态显示,易于修改,交互性好

扫描速度快,线条质量高,图形清晰,图线光滑。

缺点:

不能产生多级灰度的真实感显示,图形的复杂程度受显示器扫描速度的限制

价格贵,目前很少使用。

2.存储管式显示系统

利用显示管本身来存储信息技术(随机扫描器使用了一个独立的存储器来存储图形信息)优点:

图形保持时间长,比较稳定。

电路结构简单,成本低。

缺点:

显示画面速度慢,不适宜动态修改,交互性差。

图形复杂度受到限制。

3.光栅扫描式显示系统

随机扫描式显示器、存储管式显示器:

画线设备,在屏幕上显示一条直线是从屏幕上

一个可编地址点直接画到另一个可编地址点。

光栅扫描式显示器:

画点设备,可以看作是一个点阵单元发生器,

并可控制每个点阵单元亮度,可以生成多种灰度和

颜色,色彩连续变化具有真实感的图形。

(1)光栅扫描式显示系统组成

把计算机送来的图形(如画线、画多边形、画填充区域或写字符等)基本画图命令扫描转换成为相应的点阵,即位图(bitmap) 点阵的每一点与屏幕像素一一对应,点阵中每个元素就是像素值,通常用1~12位二进制数值来表示灰度或色彩。

位映射(bit mapping)技术:由若干位数据来对应屏幕上一点的光栅图形显示技术将屏幕显示图形的映像(Image),即位图放入显示存储器中。所以显示存储器又叫位存储器,通常称之为帧缓冲器(Frame Buffer)。为了使CRT屏幕上的图形能持续地进行显示,显示存储器的内容需要不断地读出并送到监视器,使得画面能以一定的频率刷新。显示存储器的分页处理:显示存储器中同时存放多幅画面,这时存储区划分成若干页,每一页存放一幅位图。物理屏幕当前正在显示的页称为可见页(Visual Page)。主机每次只能向一个页进行读写操作,这个页就称作活动页(Active Page)。

存储器的页面可以比屏幕位图大得多,这样屏幕只能显示画面的一部分,通过上下左右移屏功能,用户可以看到显示存储器中的整个画面。

(1)光栅扫描式显示器组成

用来定义像素的颜色。又称为调色板。

彩色表的目的是为了不使显示存储器容量增大,而能显示更多的颜色,例如:显示器要控制三种原色,即R(红)、G(绿)、B(蓝),为了使三种原色按不同的比例合成各种颜色,每种颜色要有不同的灰度,如果每个像素各个原色要16种灰度,于是每个原色要占4位,则每个像素要12位,于是显示存储器容量就要很大,彩色表可解决此问题。

采用彩色表时,显示存储器的像素值不再是直接送到监视器中的颜色值,而仅是颜色的一个索引(Color Index),即彩色表的地址,用八位表示一个像素值,如编号69(01000101)为

彩色表对应地址

从彩色表对应地址项中读出R、G、B三种颜色分量(即颜色号的定义值)然后送监视器

例如:彩色表的字长为12bit(R、G、B各4bit),这意味着最多可定义212=4096种不同颜色

彩色表结构

为什么说彩色表的使用节省了存储容量?

彩色表的地址数目是由像素值的位长来决定的,也就是彩色素的多少,也即是一屏能显示颜色数目的多少,例如像素值有8位,那么彩色表的地址=彩色素数目=一屏能显示的颜色数=256

像素值的位长与彩色表的字长(也即是R/G/B三种原色的总位长)无关,例如像素值的位长为8,R/G/B三种原色各有16(256)种灰度,那么彩色表的字长为12(24),该显示系统所能显示的颜色总数为4096(16777216)种,但是每屏最多能显示的颜色数目只有28=256种。

CRT 控制器

使电子束不断地自上而下、自左面右进行屏幕扫描,形成光栅(Raster),产生水平和垂直步信号送往CRT。

2.3 计算机图形输入/输出设备

一. 键盘

二. 鼠标

一.机械式鼠标器

二.光电式鼠标器

三.光机式鼠标器

一种检测装置

功能一般有两种:拾取和跟踪使用时要有相应的软件配合。

数字化仪

数字化仪时常用来摘取放在它上面的工程图上的大量点,经数字化后存储起来,以此作为图形输入一种手段。

工作原理:数字化仪平板实际上就是一个XY直角坐标系,它上面的任何一点都对应于一个坐标值(x,y),当游标器移动到平板上某一位置时,按一下游标器上的开关,便可获得这一位置的坐标值,并自动地把这个坐标值(x,y)送到计算机内。

只要将画有此曲线的图纸贴在数字化仪的平板上,并移动游标器到各个点A i(i=1,2,……,每次按下游标器上的开关,便把这些点的坐标(x i,y i)自动地送到计算机内

图形输入板则更多用于交互设计,使用时大多划出一个台板图形区,其余部分放置菜单,称为菜单区。

图形区

菜单区

台板图形区与显示屏之间存在着一种映射关系

图形输入板的使用方式有三种:

(1)图形变成数字化信息。

(2)拾取台板菜单区中的菜单项,即取出拾取点的坐标,算出该菜单项的代码并转入相应程序运行。

(3)选择输出坐标数据的方式,共有四种方式。第一种为点方式,即先拾取一个点,接着输出该点的坐标;第二种称连续方式,即随着定位工具的移动,连续输出点的坐标;第三种称开关连续方式,即当定位工具移动且同时按下开关时才能连续输出点的坐标;第四种称增量方式,这时拾取点的坐标以相对于上次拾取点的增量坐标形式输出。以上四种方式可通过选择图形输入板上的有关按钮来决定。

图形扫描仪

直接把图形(工程图纸)和图像(如照片、广告画)扫描输入到计算机中,以像素信息进行存储表示的设备。

按所支持的颜色分:

单色扫描仪和彩色扫描仪

按所采用的固态器件分:

电荷耦合器件(CCD)扫描仪、MOS电路扫描仪和紧贴型扫描仪等;

按扫描宽度和操作方式分:

大型扫描仪、台式扫描仪和手动式扫描仪.

图形扫描基本过程(CCD扫描仪)

扫描光源通过待扫描材料

再经一组镜面反射到CCD

由CCD转换产生图像数据,然后,传输给计算机主机

经过适当的软件处理,以图像数据文件的形式存储或使用。

分辨率:在原稿的单位长度(英寸)上取样的点数,单位是dpi(dot per inch)一般在300dpi-1000dpi

扫描仪的性能指标

支持颜色、灰度等级:目前有4位、8位和22位面颜色、灰度等级的扫描仪。

扫描图形分辨率越高,所需的

储空间就越大。

扫描仪支持的颜色、灰度层次越多,图像的数字化表示就越准确,但同时意味着表示一个像素的位数增加了,因而也增加了存储空间。

显示器、绘图仪、打印机

一. 绘图仪

把由计算机生成的图形输出到图纸(或其它介质)上的硬拷贝设备。

笔绘式

喷墨式

静电式

矢量型设备,绘图笔相对纸作随机移动。

在笔式绘图机上,一个电脉冲通过驱动电机与传动机构使画笔移动的距离称为步距(或称脉冲当量)

步距减小,画出的图就越精细。

1.笔式绘图仪

(1).平台式绘图机

图纸静止不动

导轨做X方向运动

笔架做Y方向运动

机械传动

(2).滚筒式绘图机

绘图纸卷在滚筒上,笔和纸都是运动的。

(3).平面电机式绘图机

采用平面电机驱动,可以取消导轨、横梁及传动机构。

(4).小型绘图机

结构简单

原理大致与平台式绘图机相同

笔式绘图机的主要技术指标

绘图速度

步距

绘图精度

功能

包括绘图幅面大小(A0,A1,A3……等),画笔数量,以及其他辅助功能(如插补功能、由线拟合功能等)

二、喷墨式绘图仪

喷墨装置多数情况是安装在类似打印机的机头上,纸则绕在滚筒上并使之快速旋转,喷墨头则在滚筒上缓慢运动,并且把青色、品红、黄色,有时是黑色墨喷到纸上。

三、静电绘图仪

绘图分两步:

(1)用静电构造一个不可见潜影

(2)喷上调色剂着色处理进行显影

针点式打印机

激光打印机

细针与色带作为打印装置

利用静电作用

利用喷射墨计作为打印装置

2.4 图形核心系统(GKS)简介

Graphics Kernel System,一种已经被ISO接受的国际图形标准

1. GKS的功能

提供了各种物理的图形输入、输出设备(图形显示器、绘图机。图形输入板等)和应用软件之间的接口。提供了与各种高级语言的接口。

2. GKS的基本概念

1.工作站

由一个操作员操纵使用的一组图形输入/输出设备是一个逻辑上的概念

一个工作站允许有多个输入设备,但只能有一个输出设备。典型的工作站由一个键盘、一个鼠标器和一台图形显示器组成。分为输出型、输入型、输入/输出型(交互式工作站)、元文件输出工作站、元文件输入工作站和图段存储器工作站六种类型。

2.坐标与坐标变换

GKS有三种不同的坐标系

供应用程序使用的实际世界坐标系统(World Coordinate System,简称WC)

各工作站物理设备使用的设备坐标系(Device Coordinate System,简称DC)

GKS内部使用的规范设备坐标系(Normalized Device Coordinate;简称NDC)

三个坐标系都是二维坐标系

3.GKS图形输出原语

GKS可以输出一些最基本的几何元素如线段、标记、填充封闭区域、文字、符号等。通常二维物体的形状及其相应的画面都可以由这些基本的图形元素来构成。应用程序是通过调用GKS的输出图元功能子程序的方式输出图元的。

GKS的六种图形输出原语(见书P41)

GKS不仅使用必要的坐标数据来规定上述各种图元的位置、大小及形状、而且可以通过各种属性来指出其外貌,从而使应用程序能很方便地生成符合实际使用要求的多姿多彩的图形。

输出图元属性(见书P42)

4. GKS图形输入设备

六种不同的逻辑输入设备:

定位设备

笔画设备

拣取设备

选择设备

数值输入设备

字符串输入设备

2.5 通用图形软件简介

一、通用图形软件的分类

图形软件的内容非常丰富,它包括二维图形的生成、图形变换、几何交切、裁剪,平面图形的布尔运算,三维图形的生成、变换、隐藏线的消除,三维剪裁,立体造型等。

图形程序包:如PLOT-10、CALCOMP等绘制软件

基本图形资源软件:如GKS及PHIGS标准的软件包,还有SGI公司研发的图形标准库OpenGL。

以及二维、三维交互图形软件,几何造型软件,动画技术软件等

CADAM(Computer-graphics Augmented Design And Manufacture,计算机图形增广设计和制

造)

CA TIA(Computer-graphics Aided Three-demensional Interactive Application,计算机辅助三维交互应用)

CAEDS(Compute Aided Engineering Design Systems,计算机辅助工程设计系统)

GKS(Graphics Kernel System,图形核心系统)

CBDS2(Circuit Board Design System 2,电路板设计系统2)

PADL(Pat and Assembly Descriptiion Language,零件和部件描述语言)

九、作业

课后习题

十、本章小结

在本章中,介绍了计算机图形系统的组成,各种图形显示器的种类以及输入输出设备等。

第3章 c语言图形程序设计基础

一、教学目标

通过对本章的学习,要求熟悉c语言图形程序设计的基础知识:屏幕颜色的设置、图形颜色设置、线的特性设定和填充。

二、教学要求

1、掌握c语言的图形颜色设置;

2、了解线的特性设定和填充。

三、教学内容提要

3.1 屏幕设置

3.2 图形颜色设置

3.3 线的特性设定和填充

3.4 图形模式下文本处理

3.5 图形存取处理

3.6 常用画图函数简介

3.7 绘图程序实例

3.8 c++语言环境下绘图

四、教学重点、难点及解决方法

重点是了解c语言图形程序设计的基础,包括图形颜色设置,线的特性设定和填充,图形模式下文本处理等。

五、课时安排

8学时

六、教学设备

课堂教学

七、检测教学目标实现程度的具体措施和要求

通过课堂提问的方式来检测学生对基本概念的掌握程度。

八、教学内容

3.1 屏幕设置

一、屏幕显示方式与坐标系

1. 文本方式与字符坐标系

在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位是字符。为了能在指定位置显示每个字符,C语言提供了字符坐标系。

左上角为坐标原点(1,1)

水平方向(x轴)分为若干列

垂直方向(y轴)分为若干行

第三章 C语言图形程序设计基础

如:(8,20)表示字符位于屏幕第8行第20列

Turbo C支持以下6种不同的显示方式:

(l)BW40 黑白25×40(25行,40列)

(2)C40 彩色25×40

(3)BW80 黑白25×80

(4)C80 彩色25×80

(5)MONO 单色25×80

(6)C4350彩色43×80(EGA),50×80(VG)

显示方式不同,所显示的字符的列数和行数也不一样,颜色也有区别,屏幕上所显示的字符数量也不一样。

2.图形方式与点坐标

在屏幕上显示的图形称图形方式。

屏幕是由像素点组成的,其像素点多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。

在图形方式下,屏幕上每个像素的显示位置用点坐标来描述。

左上角为坐标原点(0,0)

垂直方向为y轴,自上向下

水平方向为x轴,自左向右

分辨率不同,水平方向和垂直方向的点数也不一样,即其maxx,maxy数值也不同。

在Turbo C中,坐标数据可以用两种形式给出:一种是绝对坐标;另一种是相对坐标。绝对坐标的参考点是坐标的原点(0,0),x和y只能取规定范围内的正整数。相对坐标是相对“当前点”的坐标,所以其坐标的参考点不是坐标系的原点,而是当前点。在相对坐标中,x和y 的取值是相对于当前点在x方向和y方向上的增量,x和y可以是正整数,也可以是负整数。点坐标系坐标值的范围决定于所使用适配器/显示分辨率。

二、图形驱动程序与图形模式

1. 图形驱动程序

支持不同图形适配器的一组程序

由于图形显示器的种类繁多,其控制方式也各有差异,所以要显示图形就需先装入相应的图形驱动程序。

Turbo C提供了几种图形驱动程序可支持的图形适配器。下表列出驱动程序其相应的符号常量和规定值。

2. 图形模式

每种图形显示器有不同的图形显示模式

由于每种图形显示器各有几种不同的图形显示模式,因此,要显示图形就必须确定所用的显示模式,也就是说,要显示图形,不但要先装入相应驱动程序,而且还要决定所用的显示模式。不同的图形驱动程序有不同的图形模式;即使在同一图形驱动程序下,也可能会有几种图形模式。

Turbo C中图形函数均在头文件“graphics.h”中定义,所以,凡是在程序中要调用这些图形函数,都必须在程序文件的开头写上文件包含命令:

# include <graphics.h>

1. 图形系统初始化

(1).问题的提出

一般缺省情况下,屏幕为80列25行的文本方式。在文本方式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,这就是图形初始化过程。

图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序,来初始化图形化系统,并将系统设置为图形模式。

(2).初始化函数

initgraph()函数格式为:

void far initgraph(int *gdriver;int *gmode,char *path);

①gdriver:是一个整型值,用来指定要装入的图形驱动程序,该值在头文件 graphics.h 中定义,如p51表3.l所示。

②gmode:是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率,可同时显示的颜色的多少,调色板的设置方式等,几种不同的图形显示模式如p53表3.2所示。

③path:是一个字符串,用来指明图形驱动程序所在路径。如果驱动程序就在用户当前目录下,则该参数可以空字符串,否则应给出具体路径名。一般情况下,Turbo C安装在C盘的TC 目录中,则该路径为:C:\TC,如果写在参数中则为“C:\\TC”。

注意:前两个参数实际上是整型指针,调用时应加上地址运算符“&”。

对far关键字的解释:far并非C语言的标准关键字,

主要是远程链接的作用,可以将其视为远指针函数,以内存管理是段式管理为例,没有far 这个关键字时,内存地址仅是段内跳转,有far这个关键字时内存地址是段间跳转。

几个头文件

graphics.h

stdlib.h

conio.h

(3)初始化方式

①已知显示器类型的图形系统初始化

已知所用图形显示器的种类和要使用的图形模式,初始化图形系统可如下面程序所示:例3.1

#include "graphics.h"

main()

{int gdriver,gmode;

gdriver=CGA; /*设置驱动程序为CGA*/

gmode=CGAC0; /*选用CGA图形模式*/

initgraph(&gdriver,&gmode,"c:\\TC");

/*初始化图形系统*/

bar3d(10,20,50,80,0,0); /*画一实心长方形*/

getch(); /*等待按一键结束*/

closegraph(); /*关闭图形系统,回到文本方式*/

}

此处也可用整型常数代替符号常量

gdriver=1; gmode=0;

②不知显示器类型的图形初始化。

Turbo C提供了一个对图形显示器硬件测试的函数detectgraph()。

它的格式为:

void far detectgraph(int *gdriver,int *gmode);

该函数在计算机有图形适配器的情况下,确定图形适配器的类型,若系统有图形适配器,则返回适合于适配器的图形驱动程序的代码,用gdriver指向的整型量表示,该函数把gmode 所指的变量设置为适配器所能支持的最高分辨率。若系统无图形适配器,则gdriver所指变量为-2。

例3.2

#include "stdio.h"

#in clude “conio.h”

#include “stdlib.h”

#include "graphics.h"

main()

{ int gdriver,gmode;

detectgraph(&gdriver,&gmode);

/*测试结果存放于gdriver,gmode中*/

if(gdriver<0)

{ printf("there is not graphics displayer\n");

exit(1);

} /*无图形显示模式时,显示信息,停止程序*/

标准的输入输出函数

调用DOS控制台I/O子程序的各个函数

说明一些常用的子程序:转换子程序,搜索、排序子程序

可以把上述对图形显示器的检测和初始化工作放在一起来自动完成,即规定gdriver=DETECT,则 initgraph()函数会自动按照系统所配置的图形显示器来确定驱动程序,并把图形模式设置为检测到驱动程序的最高分辨率,实现图形系统初始化。

③自动初始化图形系统

printf("detect graphics driver is

# %d,mode is # %d\n ",gdriver,gmode);

/*显示硬件测试结果*/

getch(); /*等待按一键*/

initgraph(&gdriver,&gmode,"c:\\tc"); /*初始化*/

bar3d(10,20,50,80,0,0); /*画实心长方形*/

getch();

closegraph(); /*关闭图形系统,返回文本模式*/ return (0);

}

例3.3

# include "graphics.h"

# include “conio.h”

main()

{ int gdriver=DETECT,gmode;

/*自启动搜寻显示器类型和显示模式*/

initgraph(&gdriver,&gmode,"c:\\tc"); /*初始化*/

bar3d(10,20,50,80,0,0);

/*画实心长方形*/

getch(); /*等待按一键*/

closegraph();

/*关闭图形系统,返回文本模式*/

return (0);

}

2. 图形系统的关闭

从上述几个例子已看到在图形编程中均先用函数initgraph()对图形系统进行初始化,即启动图形系统,进人绘图状态,而在程序结束前都用函数closegraph()关闭图形系统,以释放图形驱动程序所占用的内存空间,使系统回到文本文件。

关闭图形系统函数格式为:

void far closegraph();

所有有关图形显示程序一定是在initgraph()和closegraph()之间。从initgraph()后,显示器就进入图形方式,而从closegraph()后,显示器就退出图形方式回到文本显示方式。

3. 图形模式的控制

为了对图形系统模式进行控制,即从图形模式转换成文本模式,或从文本模式转换成图形模式,或设置驱动器有效模式,或读取当前图形模式和范围,Turbo C都提供了相关函数: (1)从图形模式转换成文本模式

(2)从文本模式转换成图形模式

(3)设置驱动器有效模式

(4)读取当前图形模式和范围

(l)返回当前图形模式值

int far getgraphmode(void);

函数返回当前图形模式,其返回值如表p51 3.2所示。

(2)恢复屏幕在图形初始化前模式

void far restorecrtmode(void);

函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前状态。

(3)设置系统图形模式并清屏幕

void far setgraphmode(int gmode);

函数把当前图形模式设置为gmode所指定的模式。

(4)获取图形驱动器可使用的模式范围

void far getmoderange(int driver,int *lomode,int *himode);

该函数确定由driver所指定图形驱动器能够支持的最低和最高模式,并且把这些值放在由lomode和himode所指向变量中。

通过调用此函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph再返回图形模式。

例3.4

#include "graphics.h"

#include "stdio.h"

#include “conio.h”

main()

{ int gdriver,gmode,lo,hi;

gdriver=CGA; /*设置CGA的图形驱动程序*/

getmoderange(CGA,&lo,&hi);

/*获得CGA的图形模式范围*/

printf("CGA surpporting modes range from %d to %d.\dn",lo,hi);

/*显示CGA显示模式范围*/

initgraph(&gdriver,&lo,"c:\\tc");

/*初始化CGAC0*/

bar3d(100,30,130,150,0,0);

/*画一实心方块*/

getch();

gmode=getgraphmode(); /*获得现行图形模式*/

restorecrtmode();

/*返回图形初始化前的现实模式*/

printf("Now in text mode,press any key back to graphics mode. \n");

getch();

setgraphmode(gmode);

/*再回到图形模式*/

rectangle(50,30,100,130);

/*画一长方形*/

getch();

closegraph(); /*关闭图形系统*/

return (0);

}

四、图形坐标的设置

即运用光标定点,确定坐标位置。

可用Turbo C提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。1.定点

(1)把当前光标移到所需的位置(即x、y点)

void far moveto(int x,int y);

此函数把当前窗口中的当前光标位置(cp)移到所需的(x、y)位置(不是画)。

(2)以增量方式移动当前光标

void far moverel(int delax,int delay);

此函数把光标从当前位置(cp)开始,在x,y方向移动,移动距离分别为delax,delay。例如:若当前光标位置在(10,10)处,执行下列语句后即移到(20,30)的位置上。

moverel(10,20);

2. 读取当前光标位置

int far getx(void);

此函数返回光标在x轴位置。

int far gety(void);

此函数返回光标在y轴的位置。

例3.6 画一“王”字

3.读取x,y轴的最大值”

int far getmaxx(void);

此函数返回x轴的最大值(最大横坐标)。

int far getmaxy(void);

此函数返回y轴的最大值(最大纵坐标)。

例如:下列语句显示光标当前位置的x、y值:

printf("cp's loc:%d%d",getx(),gety());

3.2 图形颜色设置

在画图时,往往要求配置一定的颜色以使图形光彩夺目。颜色分为前景色和背景色。前景色是指构成字符和图形点的颜色;而背景色是指整个显示屏颜色。Turbo C提供了多个颜色控制函数用来设置前景、背景、改变调色板等。

一、颜色的设置

画图时,用户可以对当前的背景颜色和作图颜色进行设置。

1. 设置当前背景颜色

void far setbkcolor(int color);

将背景色设置成color所指定的颜色值。参数color可以用名字,也可以用数字,它们对应关系在graphics.h中定义,表3.3(见书P60)列出背景色名称和数值的对应关系。缺省时,默认值为0,即黑色。

2. 设置当前画图颜色

void far setcolor(int color);

该函数把当前画图颜色设置为color所指定颜色,即画笔的颜色。实际对应的颜色和调色板有关,缺省时,默认值是白色。

例3.11 将背景颜色设置为黄色,画笔设置为红色,

画一圆。

#include "graphics.h"

#include "conio.h"

void main()

{int gdriver,gmode;

gdriver=VGA;

gmode=EGAHI;

initgraph(&gdriver,&gmode," ");

setbkcolor(YELLOW);

/*设置背景色为黄色*/

setcolor(RED);

/*设置画笔为红色*/

circle(120,100,50); /*画一圆*/

getch();

closegraph();

}

这是允许的

二、调色板

调色板:是设置画颜笔的组合

设置当前画笔色与调色板有关,对应一个显示设备可能有多个调色板,这意味着尽管硬件能够显示多种颜色,但由于同一时间内只能使用一个调色板,所以在同一时间内只有显示设备可能显示总颜色的一个子集可以被显示出来,因为调色板内颜色的数只受到可用视频内存的限制。根据颜色控制方法不同,可以把支持的颜色屏幕划分为两类:一类是CGA,包括CGAHI、MCGAMED、MCGAHI、ATT400MED、ATT400HI;另一类是EGA,包括EGA 和VGA适配器。

1、CGA调色板

CGA类屏幕有两种分辨率:低分辨率和高分辨率。

(1)低分辨率

低分辨率方式显示320×200个像素点,4种颜色;

第三章C语言图形程序设计基础

在CGA低分辨率方式下,可以显示4种颜色,这4种颜色由选择的调色板决定。在CGA 方式下可以使用的调色板有CGAC0、CGAC1、CGAC2和CGAC3。每种CGA调色板均含有4种不同颜色,调色板不同所包含的颜色也不一样。

每种调色板只能使用与它列在同一行中的颜色,其编号依次为0、1、2、3,也可以使用符号常量。

表中调色板号是图形方式

而颜色0是背景色,颜色1、2、3是像素点颜色。调色板在initgraph函数中设置,颜色用setcolor函数设置。

背景色默认是黑色

如果setcolor(a),a>=3,那么将显示值最大的那种颜色,例如CGAC0,将显示黄色

(2)高分辨率

高分辨率方式显示640×200个像素点,只有两种颜色。黑色背景和彩色前景。由于CGA 本身原因,背景色就是硬件所认为的背景色,可用setbkcolor参照课本P60表3.3设置,前景色(即画笔颜色)始终是青色。

例3.12在高分辨率下画一青色圆。

# include "graphics.h"

#include "conio.h"

void main()

{

int gdriver=CGA,gmode=CGAHI;

initgraph(&gdriver,&gmode, "");

cleardevice();

setbkcolor(3);

circle(160,100,50);

circle(160,100,25);

getch();

closegraph();

}

程序执行后,在青色屏幕上显示两个白色圆图形。

2、EGA调色板

对EGA来说,总共可以有64种颜色,但只有一个调色板,这个调色板只有16项,可同时显示16种颜色。默认的这16种颜色可参看P60表3.3。表3.5(见书P63)的颜色不准确,是随机选取的,不作为参考。

3、改变调色板的一种颜色

void far setpalette(int oldcolor,int newcolor);

此函数改变屏幕系统所显示颜色。它把调色板oldcolor变为newcolor。

(1). 对于CGA模式,

只有背景色能改变,而背景色总是取oldcolor=0

例如,下列语句可把背景色改成绿色:

setpalette(0,GREEN);

Turbo C中好像不支持对该函数的执行

(2).对于EGA模式

可以用setpalette( )函数将某一种颜色设置为16 种不同颜色中的一种。oldcolor是表3.3中任一颜色,而newcolor是表3.5中前7种颜色。

例如:setpalette(BLUE,EGA-GREEN);

或setpalette(1,2);

将屏幕上的蓝色(BLUE)均变为绿色(EGA-GREEN)

三、获取颜色信息

1. 读取当前背景颜色

int far getbkcolor(void);

该函数返回当前背景颜色,其背景颜色值如表3.3所示。

例如:下列语句显示当前背景颜色:printf("background color is %d",getbkcolor());

2. 读取当前画图颜色

int far getcolor(void);

该函数返回当前画笔颜色。

例如,在CGAC2图形模式下,调色板包含四种颜色:0为背景色,1为绿色,2为红色,3为棕色。如果getcolor( )函数的返回值为1,则当前画笔色为绿色。

3.读取最高可用颜色数

int far getmaxcolor(void);

该函数返回当前屏幕模式下最大有效颜色值。在EGA模式下,getmaxcolor()函数返回最大值为15,这表明用setcolor()函数值在0-15有效;在CGA低分辨率模式中,getmaxcolor()函数返回最大值为3,这表明用setcolor()函数值在0-3有效;而在CGAHI模式中,返回值为1,因为画笔始终是青色。

4. 在点(x,y)处画一规定颜色点

void far putpixel(int x,int y,int color);

把color所指定的颜色写到(x,y)处的像素上。

5.读取点(x,y)的颜色

int far getpixel(int x,int y);

此函数返回指定点x,y位置上的像素颜色。

例3.14 在不同位置画点

#include "graphics.h"

#include "conio.h"

void main()

{int gdriver=DETECT,gmode;

int color,i,max;

initgraph(&gdriver,&gmode, "");

max=getmaxcolor();

for(i=0;i<20;i++)

putpixel(50+i*10,20,max);

color=getpixel(50,20);

putpixel(150,150,color);

getch();

closegraph();

}

得到当前屏幕模式下最大有效颜色值

以(50,20)为起点,在X正方向上每隔10用当前屏幕模式下最大有效颜色画点

得到点(50,20)的像素颜色

把color所指定的颜色写到(150,150)处的像素上。

3.3 线的特性设定和填充

一、线的特性设定

用画线函数进行画线时,其默认值均属于一像素点宽度的实线。为了改变线形与线宽,Turbo C提供了可以改变线型和线宽的函数。

void far setlinestyle(int linestyle,

unsigned pattern,int width);

该函数所用三个参数含义如下:

(1)linestyle:为整型值,用来定义所画直线类型

表中前四种为系统预定义的类型,第五个为用户自定义类型。

线型的代号说明

(2)pattern:无符号整型数。该参数在需要用户自定义线型时使用,如果是使用前四种系统预定义的线型,则该参数可取0值。

(3) width:整型数。指定所画直线的粗细,以像素为单位,分为两种情况

通过上述几个参数的不同组合,就可以根据需要画出不同类型、不同粗细的直线。

例如:setcolor(RED);

Setlinestyle(DASHED-LINE,0,THICK-WIDTH);

line(10,20,150,70);

从(10,20)到(150,70)用一条红色的3个像素宽点划线

当函数setlinestyle的第一个参数为USERBIT-LINE(或4)时,可以由用户自己定义直线类型。此时,第三个参数意义同前,直线类型在第二个参数中定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。某一位置1时表示直线上相应位置以当前颜色显示;如果某位为0,则其对应像素不显示或不改变(仍用原来颜色)。

例如:1111 1111 1111 1111

16位全置1,因此画一条16个像素的点实线(就是实线)。

1010 1010 1010 1010

则隔位置1,因此画一条16个像素的点虚线(就是点线)。

在实际编写程序时,一般把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数,故上面两个例子转换为十六进制数为:FFFF和AAAA 函数调用方法为:setlinestyle(4,0xAAAA,1);

用这种方法,可以根据需要定义各种线型。

#include

例3.15演示系统预定义的四种线型

#include "conio.h"

#include "stdio.h"

void main()

{

int i,j,c,x=50,y=50,k=1;

int gdriver=DETECT,gmode;

printf("input color number.\n");

scanf(“%d”,&c); /*输入所选择的颜色*/

initgraph(&gdriver,&gmode, "c:\\tc")

cleardevice();

setbkcolor(11); /*设置背景色为浅青色*/

setcolor(c); /*设置前景色为输入颜色*/

for(j=1;j<=2;j++)

{for(i=0;i<4;i++)

{setlinestyle(i,0,k);

rectangle(x,y,x+210,y+80);

x=x+110;

y=y+40;

}

k=3;

x=50;

y=250;

}

getch();

closegraph();

}

Setlinestyle(1,0,1) ,线型为点线, 1个像素宽

Setlinestyle(2,0,1) , 线型为中心线, 1个像素宽

当输入颜色为红色时结果如下:

Setlinestyle(0,0,1),线型为实线, 1个像素宽

Setlinestyle(1,0,3),线型为点线,3个像素宽

Setlinestyle(2,0,3),线型为中心线, 3个像素宽

Setlinestyle(3,0,3),线型为虚线, 3个像素宽

Setlinestyle(0,0,3),线型为实线,3个像素宽

Setlinestyle(3,0,1),线型为虚线, 1个像素宽

2.设置文本对齐方式

void far settextjustify(int horiz,int vert);

此函数规定文本输出在水平和垂直方向上的输出方式.参数horiz和vert是整型数, 用来确定文本输出的当前对齐位置。

horiz和vert的取值

horiz确定

水平方向的

对齐位置

vert确定垂直方向的对齐位置。

例如,执行settextjustify(RIGHT_TEXT,BOTTOM_TEXT);

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号: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; }

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 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对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

计算机图形学实验报告,DOC

欢迎共阅

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握 3. 1.利用 2.加强对 四 { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } voidDDALine(intx0,inty0,intx1,inty1) { glColor3f(1.0,0.0,0.0); intdx,dy,epsl,k; floatx,y,xIncre,yIncre; dx=x1-x0;dy=y1-y0;

x=x0;y=y0; if(abs(dx)>abs(dy))epsl=abs(dx); elseepsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glEnd(); } } { } { } { glutInitWindowSize(400,300); glutInitWindowPosition(100,120); glutCreateWindow("line"); Initial(); glutDisplayFunc(Display); glutReshapeFunc(winReshapeFcn); glutMainLoop(); return0; }

计算机图形学实验

实验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 ;

计算机图形学实验报告

目录

实验一直线的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

佛山科学技术学院计算机图形学实验指导书 李晓东编 电信学院计算机系 2011年11月

实验1 直线段的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1.通过实验,进一步理解直线段扫描转换的DDA算法、中点bresenham算法及 bresenham算法的基本原理; 2.掌握以上算法生成直线段的基本过程; 3.通过编程,会在C/C++环境下完成用DDA算法、中点bresenham算法及 bresenham算法对任意直线段的扫描转换。 实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用DDA算法中点bresenham算法及bresenham算法实现任意给定两点的直线段的绘制(直线宽度和线型可自定)。 实验步骤: 1、复习有关算法的基本原理,明确实验目的和要求; 2、依据算法思想,绘制程序流程图; 3、设计程序界面,要求操作方便; 4、用C/C++语言编写源程序并调试、执行; 5、分析实验结果 6、对程序设计过程中出现的问题进行分析与总结; 7、打印源程序或把源程序以文件的形式提交; 8、按格式要求完成实验报告。 实验报告要求: 1、各种算法的基本原理; 2、各算法的流程图 3、实验结果及分析(比较三种算法的特点,界面插图并注明实验条件) 4、实验总结(含问题分析及解决方法)

实验2 圆的扫描转换 实验类型:设计性 实验类别:专业实验 实验目的 1、通过实验,进一步理解和掌握中点bresenham画圆算法的基本原理; 2、掌握以上算法生成圆和圆弧的基本过程; 3、掌握在C/C++环境下完成用中点bresenham算法圆或圆弧的绘制方法。实验设备及实验环境 计算机(每人一台) VC++6.0或其他C/C++语言程序设计环境 实验学时:2学时 实验内容 用中点(Besenham)算法实现圆或圆弧的绘制。 实验步骤 1.复习有关圆的生成算法,明确实验目的和要求; 2.依据算法思想,绘制程序流程图(注意圆弧生成时的输入条件); 3.设计程序界面,要求操作方便; 4.用C/C++语言编写源程序并调试、执行; 5.分析实验结果 6.对程序设计过程中出现的问题进行分析与总结; 7.打印源程序或把源程序以文件的形式提交; 8.按格式要求完成实验报告。 实验报告要求: 1.分析算法的工作原理; 2.画出算法的流程图 3.实验结果及分析(比较圆与圆弧生成算法的不同) 4.实验总结(含问题分析及解决方法)

计算机图形学实验二

实验报告 课程名称:计算机图形学 实验项目:区域填充算法 实验仪器:计算机 系别:计算机学院 专业:计算机科学与技术 班级姓名:计科1602/ 学号:2016011 日期:2018-12-8 成绩: 指导教师:

一.实验目的(Objects) 1.实现多边形的扫描线填充算法。 二.实验内容 (Contents) 实现多边形的扫描线填充算法,通过鼠标,交互的画出一个多边形,然后利用种子填充算法,填充指定的区域。不能使用任何自带的填充区域函数,只能使用画点、画线函数或是直接对图像的某个像素进行赋值操作;

三.实验内容 (Your steps or codes, Results) //widget.cpp //2016CYY Cprogramming #include"widget.h" #include #include #include using namespace std; #define H 1080 #define W 1920 int click = 0; //端点数量 QPoint temp; QPoint first; int result = 1; //判断有没有结束 int sign = 1; //2为画线 int length = 5; struct edge { int ymax; float x; float dx; edge *next; }; edge edge_; QVector edges[H]; QVector points;//填充用 bool fin = false; QPoint *Queue = (QPoint *)malloc(length * sizeof(QPoint)); //存放端点的数组 Widget::Widget(QWidget *parent) : QWidget(parent) { } Widget::~Widget() { } void Widget::mouseMoveEvent(QMouseEvent *event) { setMouseTracking(true); if (click > 0 && result != 0) { startPt = temp; endPt =event->pos(); sign = 2; update(); } } void Widget::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { } else if (event->button() == Qt::RightButton) { sign = 2;

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号: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;

计算机图形学上机实验指导

计算机图形学上机实验指导 指导教师:张加万老师 助教:张怡 2009-10-10

目录 1.计算机图形学实验(一) – OPENGL基础 ..................................... - 1 - 1.1综述 (1) 1.2在VC中新建项目 (1) 1.3一个O PEN GL的例子及说明 (1) 2.计算机图形学实验(二) – OPENGL变换 ..................................... - 5 - 2.1变换 (5) 3.计算机图形学实验(三) - 画线、画圆算法的实现....................... - 9 - 3.1MFC简介 (9) 3.2VC6的界面 (10) 3.3示例的说明 (11) 4.计算机图形学实验(四)- 高级OPENGL实验...................... - 14 - 4.1光照效果 (14) 4.2雾化处理 (16) 5.计算机图形学实验(五)- 高级OPENGL实验........................ - 20 - 5.1纹理映射 (20) 5.2反走样 (24) 6.计算机图形学实验(六) – OPENGL IN MS-WINDOWS .......... - 27 - 6.1 实验目标: (27) 6.2分形 (28)

1.计算机图形学实验(一) – OpenGL基础 1.1综述 这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。 OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。 本次实验不涉及面向对象编程,不涉及MFC。 1.2在VC中新建项目 1.2.1新建一个项目 选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。 1.2.2为项目添加文件 为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:\program files\microsoft visual studio\vc98\lib目录中。 选中菜单Project->Add To Project->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project->Setting->Link->Object/library Modules 即可。 点击工具条中New Text File按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。 1.3一个OpenGL的例子及说明 1.3.1源程序 请将下面的程序写入源文件Test.c,这个程序很简单,只是在屏幕上画两根线。 #include

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

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

一、实验目的 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);

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

计算机图形学实验二报告

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

成绩评定表

曲线拟合 1. 实验内容 1. 绘制三次Bezier曲线 (1)给定四个已知点P1—P4,以此作为控制顶点绘制一段三次Bezier曲线。 (2)给定四个已知点P1—P4,以此作为曲线上的点绘制一段三次Bezier曲线。 2. 绘制三次B样条曲线 给定六个已知点P1—P6,以此作为控制顶点绘制一条三次B样条曲线。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析 1. 绘制三次Bezier曲线 Bezier曲线是用N+1个顶点(控制点)所构成的N根折线来定义一根N阶曲线。本次实验中的三次Bezier曲线有4个顶点,设它们分别为P0,P1,P2,P3,那么对于曲线上各个点Pi(x,y)满足下列关系: P(t)=[(-P0+3P1-3P2+3P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P2)t+(P0+4P1+P2)]/6 X(t)=[(-X0+3X1-3X2+3X3)t3+(3X0-6X1+3X2)t2+(-3X0+3X2)t+(X0+4X1+X2)]/6 Y(t)=[(-Y0+3Y1-3Y2+3Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y2)t+(Y0+4Y1+Y2)]/6 其中P0、P1、P2、P3为四个已知的点,坐标分别为(X0、Y0)、(X1、Y1)、(X1、Y2) 、(X3、Y3)。所以只要确定控制点的坐标,该曲线可通过编程即可绘制出来。 2. 绘制三次B样条曲线 三次B样条函数绘制曲线的光滑连接条件为:对于6个顶点,取P1、P2、P3、P4 4个顶点绘制在第一段三次样条曲线,再取P2、P3、P4、P5 这4个顶点绘制在第二段三次样条曲线,总计可绘制3段光滑连接的三次样条曲线。 4. 算法设计 程序框架 //DiamondView.h class CDiamondView : public CView { ……

实验报告(五)GUI程序设计(完整代码)

福建农林大学计算机与信息学院实验报告 实验(五)GUI程序设计 一、实验目的和要求 1.掌握简单GUI的设计和实现 2.理解并掌握GUI事件驱动的程序设计 3.理解网络程序设计 二、实验内容和原理 实现一个程序,用于浏览用户指定的文本文件。界面如图1所示: 图1 文本文件浏览的用户界面

2、界面实现 // Panel p to hold a label, a text field, and a button Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Label("Filename"), BorderLayout.WEST); p.add(jtfFilename, BorderLayout.CENTER); p.add(jbtView, BorderLayout.EAST); // Add jsp and p to the frame add(jsp, BorderLayout.CENTER); add(p, BorderLayout.SOUTH); 3、事件驱动 // Register listener jbtView.addActionListener(new ActionListener() { /**Handle the View button*/ public void actionPerformed(ActionEvent e) { if (e.getSource() == jbtView) showFile(); //自己实现这个方法,在textArea中浏览文本文件内容 } }); 4、网络程序设计(可选) 实现一个网络服务,用于把指定的文件内容传给客户端(见Exp_5_Server.java),在“事件驱动”中调用方法“showFileFromServer()” package com.fafu.training; import java.awt.BorderLayout; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.Inputream; import java.io.Reader; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

计算机图形学实验C++代码

一、bresenham算法画直线 #include #include #include void draw_pixel(int ix,int iy) { glBegin(GL_POINTS); glVertex2i(ix,iy); glEnd(); } void Bresenham(int x1,int y1,int xEnd,int yEnd) { int dx=abs(xEnd-x1),dy=abs(yEnd-y1); int p=2*dy-dx; int twoDy=2*dy,twoDyMinusDx=2*dy-2*dx; int x,y; if (x1>xEnd) { x=xEnd;y=yEnd; xEnd=x1; } else { x=x1; y=y1; } draw_pixel(x,y); while(x

} void myinit() { glClearColor(0.8,1.0,1.0,1.0); glColor3f(0.0,0.0,1.0); glPointSize(1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,500.0,0.0,500.0); } void main(int argc,char **argv ) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(200.0,200.0); glutCreateWindow("CG_test_Bresenham_Line example"); glutDisplayFunc(display); myinit(); glutMainLoop(); } 二、中点法绘制椭圆 #include #include #include inline int round(const float a){return int (a+0.5);} void setPixel(GLint xCoord,GLint yCoord) { glBegin(GL_POINTS); glVertex2i(xCoord,yCoord); glEnd(); } void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry) { int Rx2=Rx*Rx; int Ry2=Ry*Ry; int twoRx2=2*Rx2; int twoRy2=2*Ry2; int p; int x=0; int y=Ry; int px=0; int py=twoRx2*y; void ellipsePlotPoints(int,int,int,int);

计算机图形学实验报告

计算机图形学 实验报告 学号:20072115 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

相关主题