计算机图形学4圆及椭圆的扫描转换
- 格式:ppt
- 大小:354.00 KB
- 文档页数:38
计算机图形学基础(第2版)课后习题答案__陆枫__何云峰第⼀章绪论概念:计算机图形学、图形、图像、点阵法、参数法、图形的⼏何要素、⾮⼏何要素、数字图像处理;计算机图形学和计算机视觉的概念及三者之间的关系;计算机图形系统的功能、计算机图形系统的总体结构。
第⼆章图形设备图形输⼊设备:有哪些。
图形显⽰设备: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 Qd=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) 。
计算机图形学——圆的扫描转换(基本光栅图形算法)与直线的⽣成类似,圆弧⽣成算法的好坏直接影响到绘图的效率。
本篇博客将讨论圆弧⽣成的3个主要算法,正负法、Bresenham 法和圆的多边形迫近法,在介绍算法时,只考虑圆⼼在原点,半径为R的情况。
⼀、正负法1、基本原理假设已选取Pi-1为第i-1个像素,则如果Pi-1在圆内,就要向圆外⽅向⾛⼀步;若已在圆外就要向圆内⾛⼀步。
总之,尽量贴近圆的轮廓线。
2、正负法的具体实现1)圆的表⽰:设圆的圆⼼为(0,0),半径为R,则圆的⽅程为:F(x,y)=x2+y2–R2=0当点(x,y)在圆内时,F(x,y)<0。
当点(x,y)在圆外时,F(x,y)>0。
2)实现步骤第1步:x0=0,y0=R第2步:求得Pi(x i,y i)后找点P i+1的原则为:当P i在圆内时(F(xi,yi)≤0),要向右⾛⼀步得P i+1,这是向圆外⽅向⾛去。
取x i+1= x i+1, y i+1= y i当P i在圆外时(F(xi,yi)>0),要向下⾛⼀步得P i+1,这是向圆内⽅向⾛去,取x i+1= x i, y i+1= y i-1⽤来表⽰圆弧的点均在圆弧附近且 F(xi, yi)时正时负假设已经得到点(x i, y i),则容易算出F(x i, y i),即确定了下⼀个点(x i+1, y i+1),则如何计算F(x i+1, y i+1),以确定下下个点(x i+2, y i+2)?分为两种情况:右⾛⼀步后:x i+1=x i+1,y i+1=y i,此时:F(x i+1, y i+1)=x i+12+y i2-R2=x i2+y i2-R2+2x i+1 = F(x i, y i)+2x i+1下⾛⼀步后:x i+1=x i,y i+1=y i-1, 此时:F(x i+1, y i+1)=x i2+(y i-1)2-R2= F(x i, y i)-2y i+1由此可得:确定了F(xi+1, yi+1)之后,即可决定下⼀个点(xi+2, yi+2),选择道理同上。
第四章、基本图形生成算法教学目的:1、知道图形生成中的基本问题;2、熟练掌握直线的扫描转换、圆与椭圆的扫描;3、掌握区域填充;4、了解线宽与线型的处理。
�在光栅显示器上显示的任何一种图形,实际上都是一些具有一种或多种颜色的象素的集合。
�生成算法即图形设备生成图形的方法,也叫光栅化或或图形的扫描转换,是确定一个象素集合及其颜色,用于显示一个图形的过程。
确定一个象素集合及其颜色,用于显示一个图形的过程,称为图形的扫描转换或光栅化。
�对图形的扫描转换分为两部分:先确定像素,再用图形的颜色或其他属性进行某种写操作。
绘图元素�构成图形的基本元素,主要有点、直线、圆和曲线等。
图形元素包含的信息:①图元的类型②图元的几何信息③图元的非几何信息;④图元的指针信息11、点22、位置33、像素44、直线55、曲线66、填充点、线图形基元包括:多边形、曲线、字符串 实心图形(或称图形填充)一级图形元素二级图形元素第一节、扫描转换算法一、坐标系1.用户坐标系�在实际世界中用来描述物体的位置、形状等。
坐标单位任意,坐标值是实数、范围不限。
2.笛卡尔坐标系(直角坐标系)�在计算机图形学中使用用来描述物体。
3.设备坐标系�在某一特定设备上用来描述物体,如显示器的屏幕坐标系,绘图仪的绘图坐标系。
坐标单位为像素、步长,即设备的分辨率。
坐标值是整数,有固定的取值范围。
4.规范坐标系�在通用图形软件包中使用的用来描述物体数据所采用的坐标系。
�目的是为了使通用图形软件包摆脱对具体物理设备的依赖性,也为了便于在不同应用和不同系统之间交换图形信息。
�坐标单位任意取,坐标取值范围是[0,1]区间。
笛卡儿坐标系与屏幕坐标系的转换�屏幕(x,y)=(x笛卡儿+x最大分辨率/2,y最大分辨率/2- y笛卡儿)二、笛卡尔坐标系和设备坐标系中相关概念的区别(1)像素点�·在几何学中,点没有准数,没有大小,只表示了在坐标系统中的一个位置。
·在图形系统中,点要由数值坐标表示。
装订首页
工业学院教案
课程:计算机图形学
学期:2013/14第一学期
课时:理论52,实验12
教材:计算机图形学基础教程
计算机图形学实践教程
教师:孔令德静丽亚
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案
工业学院教案。
电子信息工程专业《计算机图形学》教学设计卢迪王鹏张开玉哈尔滨理工大学电气与电子工程学院2006年9月1 课程的基本描述课程名称:计算机图形学Computer Graphics课程性质:学科基础必修课适用专业:电子信息工程教材选用:陈传波,陆枫. 计算机图形学基础.北京:电子工业出版社,2002总学时:60 理论学时:48实验学时:12 课程设计:无学分: 3.5 开课学期:第六学期前导课程:高等数学、线性代数、C语言程序设计后续课程:数字图像处理2 教学定位2.1 能力培养目标本课程主要培养学生以下三个方面的能力:1. 认知和理解能力理解计算机图形学的基本概念、图形的表示与数据结构、曲线曲面的基本概念。
2. 逻辑思维能力理解基本图形的生成算法,并能对现有的算法进行改进,理解图形的变换和裁减算法。
3. 程序设计能力能够根据图形生成算法、裁剪算法设计相应的实现程序。
2.2 课程的主要特点计算机图形学是研究怎样利用计算机来显示、生成和处理图形的原理、方法和技术的一门学科。
是一门复杂的综合性的新兴学科,内容丰富,涵盖的知识面较广。
既有具体的图形软硬件,又有抽象的理论和算法。
为学生以后从事图形图像处理工作打下坚实的基础。
2.3 教学定位计算机图形学是一门应用广泛的新兴学科,主要介绍图形标准、图形硬件、图形的表示、基本图形的生成算法,以及图形的变换和观察等。
通过本课程的学习,学生可以了解图形系统的框架及其涉及的软件、硬件技术;了解图形学的基本问题,掌握图形学的基本概念、方法与算法;对于图形相关的应用及当前的研究热点有一个初步认识;具有一定实践体会和相关的编程能力。
3 知识点与学时分配3.1 计算机图形学及其相关概念计算机图形学及其相关概念、计算机图形系统(学时:0.5学时)计算机图形学、图形的要素、图形的表示方法(理解、核心)计算机图形学与相关学科间的关系(了解、推荐)计算机图形系统的功能(理解、核心)计算机图形系统的结构(了解、推荐)计算机图形学的发展、应用、研究动态(学时:1.5学时)计算机图形学的发展、计算机图形学的应用、计算机图形学的研究动态(了解、推荐)共2学时3.2 图形设备图形输入设备(学时:1.5学时)键盘、鼠标、光笔、触摸屏、图形扫描仪(理解、核心)操纵杆、跟踪球、数据手套、数字化仪、声频输入系统(了解、可选)图形显示设备(学时:2学时)阴极射线管、CRT图形显示器(理解、核心)平板显示器、三维观察设备(了解、可选)图形显示子系统(学时:2学时)显示子系统的结构(理解、核心)分辨率、像素与帧缓存、颜色查找表、显示长宽比(理解、核心)PC图形显示卡(了解、可选)图形绘制设备(学时:0.5学时)打印机、绘图仪(理解、推荐)共6学时3.3 图形的表示与数据结构基本图形元素与段(理解、推荐)几何信息与拓扑信息、坐标系、几何元素(理解、核心)实体、正则集合运算(了解、可选)共2学时3.4 图形的生成、变换和观察基本图形生成算法(学时:12学时)直线的扫描转换(数值微分法、中点Bresenham算法、改进的Bresenham算法)(运用、核心)圆的扫描转换(简单方程产生圆弧、中点Bresenham画圆)(运用、核心)椭圆的扫描转换(椭圆的中点Bresenham画圆)(运用、核心)多边形的扫描转换与区域填充(X扫描线算法、改进的有效边表算法、边缘填充算法、边界填充算法、泛填充算法)(运用、核心)字符处理、属性处理(了解、推荐)反走样(过取样、简单的区域取样、加权区域取样)(理解、核心)二维变换及二维观察(学时:10学时)基本概念(齐次坐标、几何变换、二维变换矩阵)(理解、核心)基本几何变换(平移变换、比例变换、旋转变换、对称变换、错切变换、二维图形几何变换的计算)(运用、核心)二维观察(基本概念、用户坐标系到观察坐标系的变换、窗口到视区的变换)(运用、核心)裁减(点的裁减、直线段的裁减、多边形的裁减、其他裁减)(运用、核心)三维变换及三维观察(学时:4学时)基本概念(三维齐次坐标变换矩阵、几何变换、平面几何投影、观察投影)(理解、核心)三维几何变换(三维基本几何变换、三维复合变换)(理解、核心)共26学时3.5 曲线和曲面基本概念(学时:2学时)曲线曲面数学描述的发展(了解、推荐)曲线曲面的表示、插值和逼近样条、样条描述(理解、核心)三次样条(学时:2学时)自然三次样条、三次Hermite样条(理解、核心)Bezier曲线曲面(学时:2学时)Bezier曲线定义和性质(理解、核心)Bezier曲线的生成(了解、可选)B样条曲线曲面(学时:2学时)定义、性质(理解、核心)B样条曲面(了解、可选)共8学时3.6 其它学时习题课(学时:4学时)实验(学时:12学时)3.7 课程覆盖的知识领域和知识单元汇总4 讲授提示及方法4.1计算机图形学及其相关概念重点:计算机图形学的定义、图形的要素、图形的表示方法、计算机图形系统的功能。
利用仿射变换把圆变成椭圆的例子标题:利用仿射变换将圆变成椭圆的例子摘要:此篇文章将介绍利用仿射变换将圆变成椭圆的例子。
我们将从概念及定义入手,逐步深入探讨仿射变换的原理,并通过具体的例子来展示其应用。
我们将总结仿射变换在几何变换中的重要性,并分享个人对此主题的观点和理解。
正文:1. 引言仿射变换是一种几何变换,在计算机图形学和计算机视觉等领域有着广泛的应用。
它可以通过改变平面上点的位置、旋转和缩放等方式,将一个几何图形转换成另一个图形,从而实现对图像的变形处理。
2. 什么是仿射变换仿射变换是指一类线性的几何变换,它保持平行关系和比例关系不变。
简单来说,它是由一个线性变换和一个平移变换组成的合成变换。
假设我们有一个平面上的点 (x, y),经过仿射变换后,它将变成 (x',y')。
仿射变换可以用矩阵表示:```[x'] = [a b] [x] + [tx][y'] [c d] [y] [ty]```其中,a、b、c、d是线性变换的参数;tx、ty是平移变换的参数。
3. 仿射变换将圆变成椭圆的例子考虑一个以原点 O(0, 0) 为圆心、半径为 r 的圆。
现在我们希望将这个圆变成一个椭圆,即改变其形状。
我们需要找到一个仿射变换,使得圆上的点变换后仍然位于椭圆上。
假设仿射变换的矩阵表示为:```[x'] = [a b] [x] + [tx][y'] [c d] [y] [ty]```为了让变换后的点 (x', y') 位于椭圆上,我们需要满足以下条件:- 变换后的点 (x', y') 到原点 O(0, 0) 的距离与原点到圆心 O(0, 0) 的距离之比应该相等,即 |(x', y')| / r = |(x, y)| / r。
- 变换后的点 (x', y') 在相同的方向上离原点 O(0, 0) 的距离应该相等。
文章题目:利用仿射变换将圆变成椭圆的数学实例在数学和几何学中,仿射变换是一种对二维或更高维度几何形状进行变换的方法。
在本文中,我将以利用仿射变换将圆变成椭圆的实例为例,探讨仿射变换的原理和应用。
1. 圆和椭圆的基本定义圆是平面上到一个固定点的距离恒定的点的集合,这个固定点称为圆心,距离称为半径。
而椭圆是平面上到两个固定点的距离之和恒定的点的集合,这两个固定点称为焦点,距离之和称为主轴的长度。
圆和椭圆都是平面几何中常见的几何形状。
2. 仿射变换的定义和特点仿射变换是指在几何空间中保持各点共线、各线平行的变换。
它是一种特殊的线性变换,包括平移、旋转、缩放和错切等基本变换。
仿射变换具有保持原有图形形状和大小不变的性质。
3. 利用仿射变换将圆变成椭圆的过程假设我们有一个标准的圆形,即圆心在原点,半径为1。
要利用仿射变换将这个圆变成椭圆,一个简单的方法是对圆进行线性变换和平移变换。
通过线性变换改变圆的形状,使其变成一个椭圆;然后通过平移变换将椭圆的位置调整到我们需要的位置。
具体操作如下:步骤一:线性变换在二维平面上,假设我们将圆点(x, y)进行线性变换得到(x', y'),则有以下公式:x' = a * xy' = b * y其中a和b分别是水平方向和垂直方向的缩放系数。
步骤二:平移变换假设我们要将圆的位置从原点平移到另一个位置(h, k),则有以下公式:x'' = x' + hy'' = y' + k其中(h, k)为平移的距离。
通过以上线性变换和平移变换的组合,我们可以将圆形变成任意倾斜角度的椭圆,并调整椭圆的位置到我们需要的位置。
4. 仿射变换在实际应用中的意义利用仿射变换将圆变成椭圆的实例是一个简单但重要的数学问题。
在实际应用中,仿射变换被广泛应用于图像处理、计算机图形学、地图投影、物体识别和运动估计等领域。
通过对图像进行仿射变换,可以实现图像的缩放、旋转、翻转、透视和镜像等操作,从而为图像处理和计算机视觉提供了便利。
北京联合大学应用文理学院实验报告课程名称计算机图形学实验(实训)名称圆的扫描转换班级信息与计算科学2009级姓名学号同组者实验(实训)日期完成日期本实验(实训)所用学时统计预习实验(实训)报告总计评阅意见:成绩北京联合大学应用文理学院实验报告一、实验目的1、掌握用中点画圆法进行圆的扫描转换方法;2、掌握用Bresenham画圆法进行圆的扫描转换方法;3、理解中点画圆法与Bresenham画圆法的区别;二、算法原理介绍1、中点画圆算法假设x坐标为xp的各像素点中,与该圆弧最近者已确定,为P(xp,yp),那么,下一个与圆弧最近的像素只能是正右方的P1(xp+1,yp),或右下方的P2(xp+1,yp-1)两者之一。
令M为P1和P2的中点,易知M的坐标为(xp+1,yp-0.5)。
显然,若M在圆内,则P1离圆弧近,应取为下一个像素;否则应取P2。
判别式d:d = F(M)=F(xp+1,yp-0.5)=(xp+1)^2+(yp-0.5)^2-R^2d的初始值为:d0 = F(1,R-0.5)=1+(R-0.5)^2-R^2=1.25-R在d≥0的情况下,取右下方像素P2,d = F(xp+2,yp-1.5)=(xp+2)^2+(yp-1.5)^2-R^2=d+2(xp-yp)+5在d<0的情况下,取正右方像素P1,d = F(xp+2,yp-0.5)=(xp+2)^2+(yp-0.5)^2-R^2=d+2xp+32、 Bresenham画圆算法假设生成圆心在坐标原点,半径为r,从x=0到x=y的1/8圆弧。
xi+1=xi +1相应的y则在两种可能中选择:y=yi,或者y=yi-1选择的原则是考察理想的y值是靠近yi还是靠近yi-1判别式:d i+1=2(xi+1)2+yi2+(yi-1)2-2r2判断式d的初始值为:d0= 3-2r。
如果d i+1>=0,则y=yi-1,di+2 =d i+1 + 4(xi- yi)+10如果d i+1<0,则y=yi,d i+2 =d i+1+ 4x i+6三、程序源代码1、中点画圆算法#include"graphics.h"#include"math.h"#include"conio.h"main(){void MidPointCircle(int,int);/*定义主函数变量,MidPointCircle中点画圆算法函数*/int gdriver,gmode; /*gdriver和gmode分别表示图形驱动器和模式*/gdriver=DETECT; /*DETECT是自动选择显示模式*/initgraph(&gdriver,&gmode,"c:\\tc3.0\\BGI");/*图形驱动文件的路径*/ MidPointCircle(200,YELLOW); /*定义圆的半径和颜色*/getch();/*getch();会等待你按下任意键,再继续执行下面的语句*/closegraph();/*关闭图形系统*/return(0); /*返回值为0*/}void MidPointCircle(int r,int color) /*定义函数变量半径和颜色*/{ int x,y;float d; /*float类型中小数位数为7位,即可精确到小数点后7位 */x=0; y=r; d=1.25-r;while(x<y) /*满足条件x<y时进入循环,不满足跳出*/{ if(d<0){d+=2*x+3; x++;}else { d+=2*(x-y)+5; x++; y--;}putpixel(x+200,y+200,color); putpixel(y+200,x+200,color);putpixel(200-x,y+200,color); putpixel(y+200,200-x,color);putpixel(200+x,200-y,color); putpixel(200-y,x+200,color);putpixel(200-x,200-y,color); putpixel(200-y,200-x,color);/* putpixel 在指定位置画一像素*/}}2、 Bresenham画圆算法#include"graphics.h"#include"math.h"#include"conio.h"main(){void Bresenham_Circle(int,int);/* Bresenham_Circle为 Bresenham画圆算法函数*/int gdriver,gmode;gdriver=DETECT;initgraph(&gdriver,&gmode,"c:\\tc3.0\\BGI");Bresenham_Circle(200,YELLOW); /*定义圆的半径和颜色*/getch();closegraph();return(0);}void Bresenham_Circle(int R,int color){ int x,y,delta,delta1,delta2,direction;x=0;y=R;delta=2*(1-R);while(y>=0) /*满足条件y>=0时进入循环,不满足跳出*/{putpixel(x+200,y+200,color); putpixel(y+200,x+200,color);putpixel(200-x,y+200,color); putpixel(y+200,200-x,color);putpixel(200+x,200-y,color); putpixel(200-y,x+200,color);putpixel(200-x,200-y,color); putpixel(200-y,200-x,color);if(delta<0){delta1=2*(delta+y)-1;if(delta1<=0)direction=1;else direction=2;}else if(delta>0){delta2=2*(delta-x)-1;if(delta2<=0) direction=2;else direction=3;}elsedirection=2;switch (direction)/*switch语句,即“切换”语句;case即“情况*/ {case 1:x++;delta+=2*x+1;break;/*执行 break 语句会退出当前循环或语句*/case 2:x++;y--;delta+=2*(x-y+1);break;case 3: y--;delta+=(-2*y+1);break;}}}四、实验结果图1中点画圆算法生成的圆半径r=200,颜色为黄色图2 Bresenham画圆算法生成的圆半径R=200,颜色为黄色五、总结与体会通过运用 C 语言环境下的图像显示设置,本次实验我学会了用中点画圆法、Bresenham 画圆法进行圆的扫描转换,更加深刻的理解了中点画圆法、Bresenham 画圆法进行圆的扫描转换的生成原理。
第四章:P2151、将中点画线算法推广以便能画出任意斜率的直线算法设计:(1)输入直线的起点坐标P0(x0,y0)和终点坐标P1(x1,y1).(2)定义直线当前点坐标x和y,定义中点偏差判别式d、直线斜率k、像素点颜色rgb(3)x= x0,y= y0计算d=0.5-k,k=( y1-y0)/(x1-x0), rgb=RGB=(0,0,255).(4)绘制点(x,y),判断d的符号,若d<0,则(x, y)更新为(x+1,y+1),d更新为d+1-k,否则(x, y)更新为(x+1,y),d更新为d-k.(5)如果当前点x小于(x1,重复步骤(4),否则结束。
程序主要代码:MidPointLine(x0,y0,x1,y1,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;if (a<b)drawpixel(x, y, color);elsedrawpixel(y,x,color);while (x > x1){If (d<0){x++;y++;d+ = delta2;}Else{X++;D+=delta1;}Putpixel(x,y,color);}ElseWhile (x<x1){If (d<0){x--;y++;d-=delta3;}Else{x--;d-=delta1;}Putpixel(x,y,color);}}2、采用整数Bresenham算法,为一台计算机编制直线扫描转换程序。
从键盘敲入两端点坐标,就能在显示器屏幕上画出对应的直线。
Void DrawLine(int color){int x0,y0,x1,y1,color, I;scanf( “%d, %d, %d, %d”, &x0, &y0, &x1, &y1);dx=x1 – x0;dy=y1 – y0;e = -dx;x = x0;y = y0;for ( i=0; i<=dx; i++){putpixel(x, y, color);x=x+1;e=e+2*dy;if (e>=0){y = y + 1;e = e – 2 * dy;}}}4、试编写按逆时针方向生成第二个8分圆的中点算法算法设计:(1)输入圆的半径(2)定义圆当前点坐标x和y、中点偏差判别式d、像素点颜色rgb(3)计算d=1.25-R,x=0,y=R, rgb=RGB=(0,0,255).(4)绘制点(x, y),及其在八分圆中的另外7个对称点‘(5)判断d的符号,若d<0,则(x, y)更新为(x+1,y),d更新为d+2x+3,否则(x, y)更新为(x+1,y-1),d更新为d+2(x-y)+5.(6)当x小于等于y,重复步骤(4)和(5),否则结束。