基本图形生成算法
图形生成算法
2021/3/6
(3- 2)
通常选ε=1/max(|△x|,|△y|) ,这时ε△x或
ε△y将变成单位步长。即在最大位移方向上,每次总 是走一步。分两种情况:
max(|△x|,|△y|)=|△x|,即|k|≤1的情况:
xi 1
xi
x
xi
1 x
x
xi
1
yi1
yi
y
yi
1 x
y
yi
k
(3- 3)
5 2021/3/6
第三章 图形显示算法基础
直线的走步组合
2021/3/6
6 2021/3/6
第三章 图形显示算法基础
圆弧的走步组合
2021/3/6
7 2021/3/6
第三章 图形显示算法基础
2021/3/6
点阵输出设备:如何在光栅显示器等数字设备上确定一个 最佳逼近于图形的象素集的过程。
2021/3/6
19 2021/3/6
第三章 图形显示算法基础
2021/3/6
dx 0,因此用dx(s t) 0即s t作为选择Si为 下一像素点的条件。
定义dx(s t) di ,为决策变量,
即di 2(rdy qdx) 2dy dx,
从图可以得出:r xi1, q yi1,
则di 2xi1dy 2 yi1dx 2dy dx,
18 2021/3/6
第三章 图形显示算法基础
y dy • x,且 s q dy
dx
r 1 dx
s dy (r 1) q dx
2021/3/6
又t 1 s q 1 dy (r 1) dx
s t s 1 s 2s 1 2 dy (r 1) 2q 1 dx
计算机图形学第3章 基本图形生成算法
例题:有点P0(4,3);P1(6,5);P2(10,
6 );P3(12,4),用以上4点构造2次B样条曲线。
2.1.7 非均匀有理B样条
非均匀有理B样条NURBS(Non Uniform Rational BSpline);
3.2.2
Bresenham画圆法
该算法是最有效的算法之一。
不失一般性,假设圆心(xc,yc) ,圆上的点(x′,y′),则:
x' x xc
y ' y yc
圆心为原点,半径为R的位于第一象限1/8圆弧的画法,即(0, R)~( R , R )。
2 2
yi ), 思想:每一步都选择一个距离理想圆周最近的点P( xi , 使其误差项最小。
画其他曲线。
3.3
自由曲线的生成
正弦函数曲线
指数函数曲线
多项式函数曲线
自 由 曲 线
概率分布曲线及样条函数曲线
3.3.1 曲线的基本理论
基本概念
2.1.4
规则曲线:可用数学方程式表示出来的,如抛物 线等。
自由曲线:很难用一个数学方程式描述的,如高
速公路等。可通过曲线拟合(插值、逼近)的方法来
例题: 利用Bresenham算法生成P (0,0)到Q(6,5)的直 线所经过的像素点。要求先 列出计算式算出各点的坐标 值,然后在方格中标出各点。
(1,1)
3.1.5 双步画线法 原理
模式1:当右像素位于右下角时,中间像素位于底线 模式4:当右边像素位右上角时,中间像素位于中线 模式2和模式3:当右像素位于中线时,中间像素可能位于底线 上,也可能位于中线上,分别对应于模式2和模式3,需进一步 判断。 当0≤k≤1/2时,模式4不可能出现,当1/2≤k≤1时,模式1不 可能出现。
电脑图形教程基本图形生成算法
P2
e’
e P P1
y方向不走步
P2
e
e’
P
P1
Bresenham画线算法(6/7)
下一步误差的计算
当e≥0时,y方向走一步
e’=2y/ x - 1 =e + y/ x - 1 e’=e + 2y - 2x
当e<0时,y方向不走步
e’=2y/ x=e + y/ x e’=e + 2y
P2
光栅图形中点的表示
Address(x,y) = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址 = k1 + k2y + x
对像素连续寻址时,如何减少计算量?
Address(x±1,y) = k1 + k2y + (x±1) = Address(x,y) ± 1 Address(x,y±1) = k1 + k2(y ±1) + x = Address(x,y) ± k2 Address(x±1,y±1) = k1 + k2(y ±1) + (x±1)
实区域填充 字符 图形反走样
光栅图形中点的表示
…
地址线性表 1D表示
(x,y)坐标
显示屏幕 2D表示
像素由其左下角坐标表示
光栅图形中点的表示
y ymax
ymin xmin
x xmax
地址 = (xmax-xmin) * (y-ymin) + (x-xmin) + 基地址
每行像素点数
行数
行中位置
P2
M (Xp+1,Yp+0.5)
P
{实用}直线圆的各种插补算法
第四章、基本图形生成算法教学目的: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)像素点�·在几何学中,点没有准数,没有大小,只表示了在坐标系统中的一个位置。
·在图形系统中,点要由数值坐标表示。
CG No3-基本图元生成-1
LinYi University School of Informatics Wang Libo
Computer Graphics 计算机图形学
程序实现
DDALine(int X0,int Y0,int X0,int Y0,Color color) { int X float dx,dy,k,y dx=x1-x0; dy=y1-y0; k=dy/dx; y=Y0; for(x=X0;x<=X1;x++){ putpixel(x,int(y+0.5),Color); y=y+k; } }
getch(); closegraph( ); }
LinYi University School of Informatics Wang Libo
Computer Graphics 计算机图形学
2、逐点比较法
1.偏差计算 <0 画笔在OA下方,走+y 一步 d=tgβ-tgα = =0 画笔在OA上,走+x 一步 >0 画笔在OA上方,走+ x 一步 第一象限: d=ym/xm—yA/xA=(ymxA-yAxm)/xAxm 判别式:Fm=ymxA-xmyA >=0 走+x <0 走+y
Computer Graphics 计算机图形学
Computer Graphics
计算机图形学
基本图元的生成
LinYi University School of Informatics Wang Libo
Computer Graphics 计算机图形学
第二章 基本图元生成算法
几何图形G={Pi | Pi 最接近图形的象素 }
计算机图形学实验报告_2
计算机图形学实验报告学号:********姓名:班级:计算机 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,Thisis my first SDI Application"。
(必选任务)3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。
定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。
3、实验过程1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档;2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,Thisis my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制;3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。
4、实验结果正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。
计算机图形学的基本算法
计算机图形学的基本算法计算机图形学是研究如何利用计算机生成、处理和显示图像的学科。
图形学的基本算法涵盖了多个方面,包括图像绘制、几何变换、光照和渲染等。
以下将详细介绍计算机图形学的基本算法及其步骤。
1. 图像绘制算法:- 像素绘制算法:基于像素的图形绘制算法包括点绘制、线段绘制和曲线绘制。
例如,Bresenham线段算法可用于绘制直线。
- 多边形填充算法:多边形填充算法用于绘制封闭曲线图形的内部区域。
常见的算法包括扫描线填充算法和种子填充算法。
2. 几何变换算法:- 平移变换:平移变换算法用于将图像在平面上进行上下左右的平移操作。
- 旋转变换:旋转变换算法用于将图像按照一定的角度进行旋转。
- 缩放变换:缩放变换算法用于按照一定的比例对图像进行放大或缩小操作。
- 剪切变换:剪切变换算法用于按照一定的裁剪方式对图像进行剪切操作。
3. 光照和渲染算法:- 光照模型:光照模型用于模拟物体与光源之间的相互作用。
常见的光照模型有Lambert模型和Phong模型等。
- 阴影生成算法:阴影生成算法用于在渲染过程中生成逼真的阴影效果。
例如,阴影贴图和阴影体积等算法。
- 光线追踪算法:光线追踪算法通过模拟光线的路径和相互作用,实现逼真的光影效果。
常见的光线追踪算法包括递归光线追踪和路径追踪等。
4. 图像变换和滤波算法:- 傅里叶变换算法:傅里叶变换算法用于将图像从时域转换到频域进行分析和处理。
- 图像滤波算法:图像滤波算法用于对图像进行平滑、锐化、边缘检测等操作。
常见的滤波算法包括均值滤波、高斯滤波和Sobel算子等。
5. 空间曲线和曲面生成算法:- Bézier曲线和曲面算法:Bézier算法可用于生成平滑的曲线和曲面,包括一阶、二阶和三阶Bézier曲线算法。
- B样条曲线和曲面算法:B样条算法可用于生成具有更高自由度和弯曲度的曲线和曲面。
以上列举的是计算机图形学中的一些基本算法及其应用。
图像生成和处理的算法和应用
图像生成和处理的算法和应用随着计算机技术的发展,图像生成和处理一直是研究的热点之一。
图像生成和处理是对数字图像进行操作、改变和转换,以达到特定的目的。
它不仅在计算机图形学、计算机视觉等学科中起着重要作用,同时也在众多领域应用广泛,如医学图像分析、图像识别、视频游戏、电影特效、物体跟踪等等。
本文将介绍几种常用的图像生成和处理的算法和应用。
一、图像生成算法1、深度学习深度学习是一种用于图像处理和实现人工智能的技术,目前被广泛应用于图像生成。
深度学习的核心思想是搭建神经网络,利用大量的数据训练模型,从而使模型具有较强的图像生成能力。
其中,生成对抗网络(GAN)是深度学习中最流行的图像生成算法之一。
GAN的基本结构是由一个生成器和一个判别器构成,通过反复训练生成器和判别器,不断提高生成器的生成能力。
2、卷积神经网络卷积神经网络(CNN)是一种用于处理图像的神经网络,在图像分类、图像分割、目标检测等方面有着广泛的应用。
CNN最常用的结构是卷积层、池化层和全连接层。
卷积层用于提取图像的特征,池化层用于缩小特征图的尺寸,全连接层用于分类等任务。
在图像生成方面,CNN可以通过反向传播算法训练生成器,从而实现图像生成。
3、自编码器自编码器是一种基于神经网络的图像生成算法,它的基本思想是将输入映射到隐藏层,然后再将隐藏层映射回输出。
自编码器的训练过程是将原始图像输入自编码器,将输出与目标图像进行比较,通过不断调整权重,使自编码器能够更精确地重构输入图像。
二、图像生成和处理应用1、图像变换图像变换包括图像旋转、平移、缩放和扭曲等操作。
在实际应用中,图像变换可以用于调整图像大小、合成多张图像等任务。
图像变换技术可以通过深度学习等算法实现。
2、图像修复图像修复是指对有缺损、噪声或损坏的图像进行修复、恢复的操作。
图像修复技术可以采用多种算法,如基于统计学的方法、基于采样的方法、基于分类的方法等。
在实际应用中,图像修复主要用于修复老照片、复原古迹等任务。
第3章 图形的基本算法
dy s t 2 ( x i 1 1) 2 y i 1 1 dx
dx(s t ) 2( xi 1 dy y i 1 dx) 2dy dx
因dx>0,所以我们可以以dx(s-t) 的正负作 为选择点的依据。若令其为di,则
d i 2( xi 1 dy y i 1 dx) 2dy dx
若s<t,则Si较靠近理论直线,应选Si,y 不变; 若s>t,则Ti较靠近理论直线,应选Ti,y 增1。 现在需要一个判别式,来判断每一步是选 Ti还是选Si。下面导出Bresenham 算法的 判别式。
判别式的导出
设一直线段由(x1,y1)至(x2,y2),(其中 y2>y1,x2>x1)则直线方程可表示为
怎样选择直线的最佳光栅位置(象素点), 是Bresenham 算法追求的目标。为此,算 法根据直线的斜率在计长方向(x或y)上, 每次都递增一个单位步长即一个象素单位, 另一个方向的增量为0或1。这种算法的巧 妙之处是只需检查判别式的符号即可,而 且计算量很小,只进行整型数计算,不必 做舍入操作。
直线的近似表示
第三章 图形的基本算法
本章内容
3.1 图形的表示 3.2 图形模式与坐标系 3.3 直线的扫描转换 3.4 圆的生成算法 3.5 多边形的填充
3.1 图形的表示
计算机图形学是一门复杂而又多样化的技 术。要想了解这项技术必须把它分成几个 易于操作的部分。图形是计算机图形学的 关键概念,处理图形我们应考虑以下问题: 1. 如何在计算机中表示图形? 2. 如何准备图形的数据? 3. 如何显示准备好的图形? 4. 如何实现人与图形的交互?
这里,图形是一个广义的概念,凡是可 以在图形设备上输出的点、线、文本等 的集合都可以称为是图形。
东北大学计算机图形学4
DDA算法原理
• 对求出的xi+1,yi+1进行四舍五入,即 round(xi+1)=(int)(x i+1+0.5)或round(y i+1)=(int)(y i+1+0.5)
DDA算法原理
xi 1 xi x yi 1 yi y
其中,
yi+1 ε△y yi xi ε△x xi+1 x
y
1 / | x |, | x || y | 1 / max(|x |, | y |) 1 / | y |, | y || x |
示例图片
右图中,
红色填充点表示的线段: 起点为(0,0) 终点为(10,20)
绿色填充点表示的线段:
起点为(0,0) 终点为(20,10)
• • • • • • • • • • • • • • • • •
Void DDAline(int x0,int y0,int x1,int y1) { int dx,dy,epsl,k; 变量定义:整数型: dx,dy,epsl,k; float x,y,xIncre,yIncre; 符点型:x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; 变量赋初值:线段起点与终点的x,y轴向 x=(float)x0; y=(float)y0; 增量;起点变量类型转换后赋值。 if( abs(dx)>abs(dy)) epsl=abs(dx); else 求x,y轴向增量的大值。 epsl=abs(dy); xIncre=(float)dx/(float)epsl; 求线段在x,y轴向上的步进增量 yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putPixel((int)(x+0.5),(int)(y+0.5))); x+=xIncre; y+=yIncre; } 增量式依次计算线段上个点,并输出。 }
第二章 基本图元的显示1
图 形 学
第二章 基本图形元素的生成算法
(0,6)
(6,6)
(6,0)
(0,0) 计 算 机 图 形 学 (5,3)
(0,0)
第二章 基本图形元素的生成算法
扫描转换:通常把图像中的点、线、圆、区域和字符等图 形基本指令组成的显示文件转换成为显示缓冲器中图像的 位映像图的过程,成为扫描转换。 位图:是与屏幕图像每个像素点一一对应的图像矩阵, 矩阵中的每个元素就是像素的值(表示灰度级别与色 彩)。 选择扫描转换算法,速度与图像质量两者之间权衡折 衷。由于在建立一幅图形过程中,基本的图形扫描转 换算法将被调用成百上千此,因此,速度快一些是比 较可取的。
1 xi 1 x i x x i x x i 1 | x | 1 y i 1 y i y y i y y i k | y |
x=x-1;y=y-k; for(x=x1;x>=x2;x--) {putpixel(x,round(y));y=y-k;}
(X1,Y1)的像素点,对应的显示缓冲器地址为: 字节地址= S + ( H / 8 ) * Y1 + ( X1 / 8 ) 的整数部分 字节内的位地址= X1 / 8 的余数 计 算 机 图 形 学
第二章 基本图形元素的生成算法
2.1.2 直线段的生成
数学上的直线是由无数个点构成的集合,显 然,光栅显示器只能近地似显示直线。对 于水平、垂直和45°斜线是可以达到较为 满意的效果的。当我们对直线进行光栅化 时,需要确定最佳逼近该直线的一组象素。 扫描转换直线段就是计算出落在直线段上 或充分靠近它的一串像素,并以此像素近 似代替原连续直线段在屏幕上显示的过程。
计 算 机 图 形 学
《计算机图形学》02 基本图形生成
直线裁剪的情况:
D
C A B
端点编码的9种结果:
1010
1000
0110
0100
0101
直线编码裁剪算法处理步骤:
若两个端点的编码均为0,则两个端点均位于窗口内,线段全显 示,结束;
将两个端点的编码的编码按位与,若结果不为0,则线段必然位 于某条边线之外,线段全不显示,结束;
(这时,某个端点必然存在为1的位,且另一个端点相应的位为0, 线段将部分显示或全不显示)则,对任一个存在1位的端点,用1 位所对应的边,将直线段分割为两段,舍弃位于边线外的段,对 边线内的段再按本规则进行处理。
作业: 用窗口(5,10,25,30),对直线(0,40)-(30,15)进行裁剪,写出处理过 程及结果。
例2 (1,1)-(9,6)直线的点阵
10
9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9 10
例3 (1,1)-(6,9)直线的点阵
10
9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9 10
例4 (2,3)-(8,7)直线的点阵
数值微分法计算步骤:
对给定的两个直线端点(x1, y1),(x2, y2), 有:x2≥x1,|x2-x1|>|y2-y1|。 (1)求得两点连线的斜率:k=(y2-y1)/ (x2-x1) (2) px1=x1,py1=y1,得直线上的点(px1, py1);令i=1; (3)若pxi=x2,则计算结束;否则,继续; (4)pxi+1=pxi+1, pyi+1=pyi+k, 得直线上的点( pxi+1, int(pyi+1+0.5) ); (5)令i=i+1,转到(3)。
计算机图形学第3章
第3章 基本图形生成算法
3.1 生成直线的常用算法
均假定所画直线的斜率k∈[0,1]。
3.1.1 DDA画线算法
DDA(Digital Differential Analyzer)画线 算法也称数值微分法,是一种增量算法。它的算 法实质是用数值方法解微分方程,通过同时对x和 y各增加一个小增量,计算下一步的x、y值。
边界表示的四连通区域种子填充算法 内点表示的四连通区域种子填充算法 边界表示的八连通区域种子填充算法 内点表示的八连通区域种子填充算法
第3章 基本图形生成算法
1.边界表示的四连通区域种子填充算法
基本思想:从多边形内部任一点(像素)出发,依“左 上右下”顺序判断相邻像素,若其不是边界像素且没有被填 充过,对其填充,并重复上述过程,直到所有像素填充完毕。 可以使用栈结构来实现该算法,算法的执行步骤如下: 种子像素入栈,当栈非空时,重复执行如下三步操作: (1)栈顶像素出栈; (2)将出栈像素置成多边形填充的颜色; (3)按左、上、右、下的顺序检查与出栈像素相邻的 四个像素,若其中某个像素不在边界上且未置成多边形色, 则把该像素入栈。
过各行各列像素中心构造一组虚拟网格线,按直 线从起点到终点的顺序计算直线与各垂直网格线的交 点,然后确定该列像素中与此交点最近的像素。 由图3-5不难看出:若s<t, 则Si比较靠近理想直线,应 选Si;若s≥t,则Ti比较靠近 理想直线,应选Ti。
第3章 基本图形生成算法
令dx=x2-x1,dy=y2-y1 递推公式 :di 1 di 2dy 2dx( yi yi 1 ) di的初值: d1 2dy dx 当di≥0时,选Ti,
第3章 基本图形生成算法
计算机图形学第3章-基本光栅图形生成算法
P4
P3
多边形顶点表示
多边形点阵表示
• 多边形填充就是把多边形的顶点表示转换为点阵表示,即从 多边形的给定边界出发,求出位于其内部的各个像素,并将
多边形的填充
• 填充条件:多边形的顶点序列<Pi,i=0,1,…,n>、填充色.
• 对多边形进行填充,关键是找出多边形内的象素.
• 多边形内点的判别准则
多边形的填充—边缘填充算法
• 算法实现: • 对多边形P的每一非水平边〔i=0,1,…,n〕上的各像素做向右
求反运算即可,见下图,其中<a>为给定的多边形;<b>为对区 域赋初值;<c>,<d>,<e>和<f>表示逐边向右求反.
多边形的填充—边界标志算法
• 基本原理:首先用一种特殊的颜色在帧缓冲器中将多边形 的边界〔水平边的部分边界除外〕勾画出来.然后再把位于 多边形内的各个像素着上所需的颜色
多边形的填充—扫描线算法
•算法步骤
•根据给出的多边形顶点坐标,建立ET表; • 求出顶点坐标中最大y值ymax和最小y值ymin. •初始化AET表指针,使它为空. •使用扫描线的yj值作为循环变量,使其初值为ymin. • 对于循环变量yj的每一整数值,重复作以下事情,直到yj大于ymax,或ET 表与AET表都为空为止: •如果ET表中yj桶非空,则将yj桶中的全部记录合并到AET表中. •对AET表链中的记录按x的大小从小到大排序. •依次取出AET表各记录中的xi坐标值,两两配对填充,即将每对xi之间的 象素填上所要求的颜色. •如果AET表中某记录的ymax=yj,则删除该记录. •对于仍留在AET表中的每个记录,用xi+1/m代替xi进行修改,这就是该 记录的边线与下一条扫描线yj+1的交点. •使yj加1,以便进入下一轮循环.
基本图形生成算法原理
基本图形生成算法原理现在的计算机能够生成各种复杂的图形,但无论其多么复杂,它都是由一些基本图形组合而成的。
因此,学习基本图形的生成算法是掌握计算机图形的基础。
本章就主要讨论一些基本图形的生成原理,如点、直线、椭圆生成。
如前面所述,目前我们使用的主要图形输出设备显示器(一般为光栅图形显示器)和打印机(喷墨、激光打印机)本质上是一种画点设备,是由一定数量的网络状细小光点(即像素)组成,使某些像素亮(将帧缓存中对应位置的值为1)和某些像素不亮(将帧缓存中对应位置的值为0)来显示图形。
因此,基本图形生成的原理是指在点阵输出设备的情况下,如何尽可能地输出最接近于原图形(理想图形)的直线或曲线图形,即以最快的速度确定最佳逼近于图形的像素集。
确定图形的像素集合并显示的过程常称之为图形的扫描转换或光栅化。
这一过程使用的计算方法称之为图形生成算法。
1 点2 直线段的生成直线是点的集合,几何学中的一条直线是由两点决定,直线在数学上可以有多种表示方法,而在计算机图形学里,直线是由离散的像素点逼近理想直线段的点的集合。
数学上的直线是没有宽度的,而计算机图形学中显示出的直线的宽度与像素点的大小有关,一个像素宽的直线的线粗为像素的边长。
由计算机生成的图形中有大量的直线段,而且曲线也是由一系列短直线段逼近生成的。
因此,研究直线生成的方法是计算机图形学的基本问题之一。
对计算机生成直线的一般要求是:线段端点的位置要准确;构成线段的像素点的集合应尽可能分布均匀,其密度应该与线段的方向及长度无关;线段生成的速度要快。
生成直线的算法有多种,这里仅介绍两种方法,即DDA 算法和Bresenham 算法。
2.1 直线DDA 算法该直线生成算法称为数值微分算法(Digital Differential Analyzer 简称DDA )。
它是一种根据直线的微分方程来产生直线的方法。
设直线的起点坐标为),(s s y x ,终点坐标为),(e e y x ,则=dx dy k xy x x y y s e s e =∆∆=-- (3-1)k 是直线的斜率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M 3 (x3, y3 )
M1(x1, y1)
o
x
M2 处的偏差为
F2 y2 xA yAx2 y1xA xA yAx1 F1 xA
若 F2 0 ,则应走+x一步到 M3 ,即:
处的偏差为
F3 y3xA yAx3 y2 xA yAx2 yA F2 yA
图形的扫描转换:在光栅显示 器等数字设备上确定一个最佳 逼近于图形的象素集的过程。
图5.1 用象素点集逼近直线
3
5.1 直线的扫描转换
直线的绘制要求 (1)直线要直; (2)直线的端点要准确,无定向性无断裂; (3)直线的亮度、色泽要均匀; (4)画线的速度要快; (5)具有不同的色泽、亮度、线型等。
对应
xi yi
x1 y1
(x2 ( y2
x1) ti y1) ti
而
xi1 yi1
x1 y1
dx(ti dy(ti
dt) dt)
xi yi
dx dt dy dt
这里
dx x2 x1, dy
终点判断 设绘图机的步距为 t,直线在x,y方向的增量分别为x和 y 。
按照上述运算方法,绘图笔从直线的起点画到终点,在x方
向上应走 x 步,在y方向上应走 y 步。因为对于任一条给
t
t
定的直线,各种方法所产生的x方向和y方向的走步信号总和
在同一台设备上是相同的,所以我们取 n x y 作为终点
如图所示,设笔的当前位置 是 M1(x1, y1) ,此时 F1 y1xA yAx1 0
应走+y一步到 M2,即:
x2 y2
x1 y1
1
此处+1表示向正方向走一个设 备单位步长。这里,我们假设 x,y坐标值均已转换为当前设备 单位。
y
A(xA, yA )
M 2 (x2 , y2 )
笔的当前位置为M。我们以 O
X
OM,OA斜率的大小来计算
偏差。偏差值d为:
d tg tg yM yA
xM xA yM xA yA xM
xM xA
当 d 0 时,表示笔在OA线段下方,根据约定,此 时应走+y一步;当 d 0 时,表示笔在OA线段上方 (或在OA线上),则应走+x一步。
数值微分法(DDA法)
DDA算法的原理是,由于直线的一阶导数是连续的,而且 dx
和 dy 是成比例的,因此可以通过在当前位置 (xi , yi ) 分别加 上两个小增量 xinc , yinc 来求出下一点的x,y坐标。
DDA法是一种基于直线的微分方程来生成直线的方法。
设一直线段由 (x1, y1)至(x2 , y2 ),此直线的参数方程可表示
y2 y1,
斜率 k dy
dx
xinc dx dt
yinc
dy dt
则
xi1 xi xinc
yi
1
yi
yinc
这里dt是某个很小的量,其取值方法的不同,决定了有2种 不同的DDA法。
简单DDA法
这样递推下去,就可以得出第i步的结果:
如 Fi 0 ,则走+x一步,此时 Fi1 Fi yA 如 Fi 0 ,则走+y一步,此时 Fi1 Fi xA 由于偏差 Fi 的推算只用到了终点坐标值 xA ,yA
而与中间点的坐标值无关,且只需要进行加减运算, 因而大大减少了计算量。
这种算法只需判断d的正负,其值的大小并不重要。 对于第一象限,因为分母 xM xA永远为正,所以只需 判断分子项的正负即可。我们得到偏差的判断公式 为:
FM yM xA yA xM
递推公式
用上式来计算偏差时,每次都要计算两次乘法,一 次减法,计算工作量还是很大的。如果我们设法用 前一点的偏差来推算走步方向以及走步以后的偏差, 则偏差计算就可以大大简化,也更适于计算机实现。 现在仍以第一象限为例,简述这种递推过程。
下面讨论这种算法的判别规则。
我们先以直线起点为坐标原点,并且约定直线在四 个象限中画笔的走向如图所示。
y
Ⅱ
Ⅰ
x
Ⅲ
Ⅳ
偏差计算
我们先以第一象限为例推导出偏差计算公式,然后 再扩展到其他象限。
Y
A(xA, yA )
一般公式
M (xM , yM )
设要画的线段为OA,而画
4
直线的扫描转换
解 决 的 问 题 : 给 定 直 线 两 端 点 P0(x0,y0) 和
P1(x1,y1),画出该直线。 逐点比较法 数值微分法 Bresenham算法 中点Bresenham算法 改进的Bresenham算法
5
逐点比较法
所谓逐点比较法,是指在绘图过程中,绘图笔每画 一笔,就与目标图形相比较,然后决定下一步走向, 用步步逼近的方法画出目标图形。
第五章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基本 二维几何图形(点、直线、圆、椭圆、多边形域、 字符串及其相关属性等)。
1
第五章 基本图形生成算法
图形生成的概念 直线段的扫描转换 圆的扫描转换 多边形的扫描转换与区域填充
2
图形生成的概念
图形的生成:是在指定的输出 设备上,根据坐标描述构造二 维几何图形。
为:
x y
x1 y1
(x2 ( y2
x1)t y1)t
其中参数t由0变化到1时,x从x1变化到x2,y从y1变到y2,
如果从 (x1, y1)至(x2 , y2 ) 分成n步,每一步的t变化dt,则第
i步时:
ti i dt, (i 1, 2, , n)
t t
判断的控制数,并将此数存入计数器内。在x或y方向上每走
一步,计数器减1,当计数器减至零时,作图停止。
也可以取
n
max
x t
,
y t
作为长度控制数(即选取x
或y方向上增量较大的方向作为计长方向),并将n存入计数
器中。在计长方向上每走一步,计数器减1,直至n为零止。