《计算机图形学》基本图形生成-精

合集下载

【华科 CAD技术与应用】第2讲 计算机图形学基础-基本图形生成

【华科 CAD技术与应用】第2讲 计算机图形学基础-基本图形生成
— CRT显示器工作原理 — LCD显示器工作原理
2.3.基本图形生成算法
— 直线生成算法 — 圆弧生成算法 — 其它基本图形生成
2.4.图形裁减算法 2.5.多边形填充算法(选学) 2.6.图形反走样算法(选学) 2.7.基于OpenGL图形库生成图形(选学)
华中科技大学CAD中心
思考问题:
1)图形如何在屏幕上显示出来?? 2)CAD图形如何生成??
象素的亮度值控制电子束对荧光屏的轰 击强度,象素在帧缓存寄存器中的位置编码 控制电子束的偏转位置。
图形系统为灵活控制图形颜色变化,往 往不直接将帧缓冲器中的数值作为显示的亮 度值,而是先经过颜色查找表(称调色板) 产生变换值来控制光点亮度。其工作方式:
显存中某位值 度
颜色表地址
华中科技大学CAD中心
为叙述方便,仅考虑圆心在原点的圆(其它位置圆可平移到原点位置)。
不妨设函数:
F (x, y) = x2 + y 2 - r 2
显然有: F(x,y)< 0,则(x,y)位于圆边界内 F(x,y)= 0,则(x,y)位于圆边界上 F(x,y)> 0,则(x,y)位于圆边界外
考虑到圆的八对称 性,不妨以第二个 八分圆进行分析, 其它八分圆则可通 过镜像实现。
华中科技大学CAD中心
刷新频率
(仅CRT)
每秒钟重绘屏幕的次数, CRT产生稳定图像所需要的最小刷新频率: = 1秒 / 荧光物质的持续发光时间 (Hz)
注:液晶显示器原理不同于CRT,不受刷新频率影响。但液晶显示 有拖尾现象,是因液晶偏转延迟所致,延时越长,拖尾越重。
帧扫描
与电视工作原理类 似,CRT电子束从上 到下、从左到右扫描 进行,每扫描一遍称 为一帧。

计算机图形学第3章 基本图形生成算法

计算机图形学第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不 可能出现。

计算机图形学ppt课件 第二章基本图形的生成与计算

计算机图形学ppt课件 第二章基本图形的生成与计算

for (x=x0; xx1, x++) drawpixel (x, int(y+0.5), color); y=y+k;



例:画直线段P0(0,0)--P1(5,2)
int(y+0.5) 0 0 1 1 2 2 y+0.5 0+0.5 0.4+0.5 0.8+0.5 1.2+0.5 1.6+0.5 2.0+0.5
角度DDA法
显然,确定x,y的初值及d值后,即可以增量方 式获得圆周上的坐标,然后取整可得象素坐标。 但要采用浮点运算、乘法运算、取整运算。
中点画圆法
利用圆的对称性,只须讨论1/8圆。第二个8分 圆 P(Xp ,Yp )
P1
M P2
P为当前点亮象素,那么,下一个点亮的象素可 能是P1(Xp+1,Yp)或P2(Xp +1,Yp +1)。
pi 2 xi dy 2 yi dx 2dy (2b 1)dx
(2.4)
在1a象限内,dx总大于0,所以pi可以判断d1d2的符号。Pi+1为
pi 1 2 xi 1dy (2 yi 1 2 yi 2 yi )dx 2dy (2b 1)dx
2( xi 1)dy (2 yi 1 2 yi 2 yi )dx 2dy (2b 1)dx
本算法是Bresenham在1965年提出。
设直线起点(x1,y1)终点(x2,y2),直 线可表示为 y mx b
y2 y1 dy b y1 m x1 , m x2 x1 dx
此处讨论先将直线方向限于1a象限,当
xi 1 xi 1

计算机图形学第3章-基本光栅图形生成算法-PPT课件

计算机图形学第3章-基本光栅图形生成算法-PPT课件

多边形的填充
•奇异点的处理 •将多边形的顶点分为两大类: •局部极值点:如图中的点P1、P2、P4和P6。对于这些点来说,进 入该点的边线和离开该点的边线位于过该点扫描线的同一侧。 •非极值点:如图中的点P3、P5。对于这些点来说,进入该点的边 线和离开该点的边线位于过该点扫描线的两侧。 •处理奇异点规则 •对于局部极值点,应看成两个点; •对于非极值点,应看成一个点。
多边形的填充—逐点判别算法
• 逐点判别算法
求出多边形的最小包围盒:从Pi(xi,yi)中求极值,xmin、ymin、xmax、 ymax。 对包围盒中的每个象素引水平射线进行测试。 求出该射线与多边形每条边的有效交点个数。 如果个数为奇数:该点置为填充色。
• 逐点判别算法虽然简单,但不可取,原因是速度慢。它割 断了各象素之间的联系,孤立地考虑问题,由于要对每个 象素进行多次求交运算,求交时要做大量的乘除运算,从 而影响了填充速度。
基本光栅图形生成算法
• 直线生成算法
• DDA方法
• Bresenham算法
• 圆弧生成算法
• 中点圆生成算法
• 多边形的填充
• 多边形表示方法
• 多边形填充的扫描线算法 • 边缘填充算法 • 边界标志算法
在计算机上绘图的一般方法
• 用现有绘图软件系统 • 画图\Word中的图文编辑工具\AutoCAD\Photoshop 等大型绘图软件 • 用绘图软件包 • OpenGL就是一个典型的、已经被接受的国际工业 标准的图形软件包。 • Java3D • 用操作系统的绘图功能 • 如Windows中Win32API中就提供了基本的绘图功能
直线生成算法—DDA算法

直线生成算法—DDA算法

计算机图形学中的基本图形生成算法--文献综述

计算机图形学中的基本图形生成算法--文献综述
《计算机图形学(第3版)》作为经典教材阐述了计算机图形学基本图形生成算法的基本概念。特别是在第四章的内容中主要讨论了一些基本图形的扫描转换的问题,如一维线框图形直线段、圆、椭圆的扫描转换问题,二维图形(多边形)的填充问题,以及图形的反走样和裁剪问题,而这些问题就是本题主要需要着重提出讨论的问题。
本文中研究的一维图形的算法主要包括直线段、圆与椭圆。
在使用计算机处理相应图形信息时经常会遇到计算机内部储存比较大的图形,以至于屏幕显示图形只是部分图形,不能完整显示。这个时候确定图形中哪些部分在显示区域中显示,而哪些不在显示区域内显示则对计算机的选择处理过程提出了要求,遇到这种情况就要运用裁剪操作,从线段裁剪到多边形裁剪有许多方法,其中主要的方法有:Cohen-Sutherland裁剪算法、中点分割算法、参数化方法和Reentrant Polygon Clipping算法。在王慧玲、冯雪花发表于《伊犁师范学院学报(自然科学版)》2008年第4期上的《对Cohen-Sutherland线段裁剪算法的分析及改进》一文中则针对上述方法中的Cohen-Sutherland线段裁剪算法提出了重点分析,首先,作者对Cohen-Sutherland线段裁剪算法提出了详细的解析:该算法运用编码的方法实现了对在显示区域内和显示区域外的判断来决定是否显示在在显示区域内显示,与此同时,这篇文章中除了研究和分析Cohen-Sutherland线段裁剪算法,还针对Cohen-Sutherland线段裁剪算法对判断所有的完全位于裁剪窗口之外的线段不能有效地情况下提出了可以通过添加判断条件,使之能完全判断出来,这使得减少了求交的次数,也提高得该算法的运算效率。关于中点分割法和参数化方法孙家广等在《计算机图形学(第3版)》一书中进行了阐述,中点分割法与Cohen-Sutherland线段裁剪算法相同点是利用对线段的端点编码,与之不同的是对于跨窗口边界的线段中点分割法将其等分为两段,直到最后的分割点与线段的端点距离达到分辨率的精度为止。多边形的裁剪与线段的裁剪不一样,如若把多边形分解成边界线段逐段进行裁剪会使得原来封闭的图形变得不封闭或者成为一些离散的线段。Suther-land和Hodgeman发明的逐次多边形裁剪(Reentrant Polygon Clipping)算法则解决了上面这个问题,该方法的基本思想是一次用裁剪窗口的一条边对多边形进行裁剪。上面对线段和多边形的裁剪的基本算法进行了一些介绍,在上面一些算法的基础上,韩俊卿,葛永慧和张东升在《太原理工大学学报》2005年第36卷第2期上面发表的《多边形窗口的矢量图形裁剪算法》一文则讨论了对于改进后的多边形窗口中的点、线、面等目标的裁剪算法,在这些算法之中,点目标的裁剪算法采用的是射线交叉法,线目标的裁剪算法采用的是通过对计算被裁剪线段和多边形的各个边真实交点之间的各个线段中点来判断是否对它们裁剪,在点和线的裁剪基础上实现面目标的裁剪。

计算机图形学图文 (5)

计算机图形学图文 (5)
dy=ye-ys; steps=abs(dx);
16
第三章 基本图形生成技术
if (abs(dy)>abs(dx)) steps=abs(dy); xIncrement=dx/steps; yIncrement=dy/steps; setPixel(x, y, c); for (i=1; i<=steps; i++) { x+=xIncrement; y+=yIncrement; setPixel(x, y, c); }
并计算每个连续的x值:
xi+1=xi+m-1
(3.4)
14
第三章 基本图形生成技术
当直线的斜率为负时, 如果-1≤m≤0, 那么, Δx=-
1, 并且
yi+1=yi-m 当m<-1时, 则Δy=-1, 且
(3.5)
xi+1=xi-m-1
(3.6)
总结起来也可以将问题简化为: 当|m|≤1时, 令
xs<xe, 则Δx=1, yi+1=yi+m; 当|m|>1时, 令ys<ye, 则Δy=1, xi+1=xi+m-1。
8
第三章 基本图形生成技术 另外, 一个明显的事实是只有水平线、 垂直线和45°线 的亮度线段是沿直线段不变的, 而其他方向直线的亮度由于 光栅化导致其结果是不均匀的。 即使对于上述的特殊情形, 直线的亮度也与其方向有关。 如图3.2所示, 45°线上像素 间距大于垂直线和水平线上的像素间距, 这使垂直线和水平 线比45°线较亮。
}
17
第三章 基本图形生成技术 算法将直线两个端点的像素位置作为输入, 其过程可概 括为: 将端点位置的水平和垂直差赋给参数dx和dy, 两者中 绝对值大者决定参数steps的值。 从像素位置(xs,ys) 开始, 确定沿直线生成下一个像素位置每步的所需偏移量, 并循环上述过程steps次。 如果dx的绝对值大于dy的绝对值, 那么x方向和y方向的 增量分别为±1和±m; 如果dy的绝对值大于dx的绝对值, 那 么y向和x方向的增量分别为±1和±m-1。

东北大学计算机图形学4

东北大学计算机图形学4
xi 1 xi x xi yi 1 yi y yi 1 1 x xi y k 1 y yi 1 y
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; } 增量式依次计算线段上个点,并输出。 }

计算机图形学基本图形生成算法

计算机图形学基本图形生成算法

y= k· x+b
k=0.571429
b=0.428571
2 X[0]=1 y0 X[1]=2
Y[0]=1 Y[0]=1 Y[1]=kx[1]+b=1.57 Y[1]=y0+k=1.57 Y[2]=y1+k=2.14 Y[2]=kx[2]+b=2.14 Y[3]=y2+k=2.71 Y[3]=kx[3]+b=2.71 Y[4]=y3+k=3.28 Y[4]=kx[4]+b=3.28 Y[5]=y4+k=3.85 Y[5]=kx[5]+b=3.85 Y[6]=y5+k=4.4 Y[6]=kx[6]+b=4.4 Y[7]=5 Y[7]=5
第3章 基本图形生 成算法
1 直线生成算法(DDA、BRES) 2 圆生成算法(Mid) 3 多边形填充算法(扫描线、区域) 4 字符图元算法
2015/4/19
1
图元
• 图元:图形软件包中用了描述各种几何 图形元素的函数称为图形输出原语,简 称图元。 • 描述对象几何要素的输出图元一般称为 几何图元。点的定位和直线段是最简单 的几何图元。 • 在选定坐标系中指定一个图形的几何要 素后,输出图元投影到该输出设备显示 区域对于的二维平面上,并扫描转换到 帧缓存的整数像素位置。
2015/4/19
5

1 直线生成算法(DDA、BRES) 2 圆生成算法(Mid) 3 多边形填充算法(扫描线、区域) 4 字符图元算法
1 直线的DDA算法
2015/4/19
6
OpenGL画点和画线函数 1) 画点函数 glVertex*( ); (*={234}{sifd}[v]) 表示该函数有后缀,指 明空间尺寸、坐标数据类型或向量形式描述。 Ex: glBegin(GL_POINTS); glVertex2i(100,50); glEnd(); glBegin(GL_POINTS); glVertex2i(100,50); glVertex2i(75,90); glVertex2i(300,590); glEnd();

计算机图形学课件:第五章基本图形生成算法

计算机图形学课件:第五章基本图形生成算法

思考题
对于前述几种直线生成算法和程序:
1.当最大位移方向是y时,应如何修改? 2. 要达到通用时,应如何修改?
5.2 圆的扫描转换
解决的问题:
绘出圆心在原点,半径为整数R的圆 x2+y2==R2
■八分法画圆
y y=-x
(-y,x)
(y,x)
y=x
(-x,y) (-x,-y)
(x,y)
(x,-y)
改进1:令e=d-0.5
xi 1 xi 1 y yi 1 (e 0) i 1 yi (e 0)
•e初=-0.5, •每走一步有e=e+k。 •if (e>0) then e=e-1
算法步骤为:
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-0.5、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+k,判断e的符号。若e>0,则(x,y)更新 为(x+1,y+1),同时将e更新为e-1;否则(x,y)更新为 (x+1,y)。
初始值d的计算
d 0 F ( x0 1, y0 0.5) y0 0.5 k ( x0 1) b y0 k x0 b k 0.5 0 .5 k
P(x i,y i) Pu(x i+1,y i+1) Q M(x i+1,y i+1/2) Pd(x i+1,y i)
y F(x,y)=0 F(x,y)>0 x F(x,y)<0 F(x,y)=0
y
F(x,y)>0
F(x,y)<0
x
图5-4

基本图形的生成优秀课件

基本图形的生成优秀课件

yi+1 (画非水平线时,y的值变化,需要计算)
其中:yi+1的计算为:
yi+1=kxi+1 +B
=k(xi+△x)+B =kxi+k△x +B =kxi+B+k△x =yi +k△x
//yi=kxi+B
=yi +k
//当△x的步进为1时
故Pi
点的坐标为:
+1
xi+1=xi+1
yi+1=round ( yi+k) //进行取整运算
xi+1=xi+1 yi+1=round ( yi+k)
分析:下一点的y坐标为当前点y 坐标加上斜率k,省略了浮点乘法。



(xi+1,(int) (yi+k))



意 图
(xi, yi)
(xi+1, yi+k)
(xi, (int) (yi))
理想直线上的坐标点 扫描转换后的像素点
2 算法:
基本图形的生成
概论
一 光栅扫描:
1 光栅扫描的基本原理: 电子束在荧光屏上按照固定的扫描线和扫描顺序扫出 一个由行和列组成的光的栅网。
2 像素: 栅网中的每一个孤立的光点,它是光栅显示的最小单位。 像素可以有不同的亮度,像素的坐标值都是整数。
3 提出问题
(1)目前使用的图形输出设备显示器:光栅图形显示器
二 数值微分法的改进算法(关键:找到Pi(Xi,Yi), Pi+1(Xi+1,Yi+1)的关系)
1 推导:

计算机图形学第3章

计算机图形学第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章 基本图形生成算法

计算机图形学教案第5章基本图形生成算法

计算机图形学教案第5章基本图形生成算法

曲面生成算法
参数曲面
通过参数方程表示曲面的几何形状,通过迭 代或数值方法计算出曲面上的点,然后连接 这些点形成曲面。
网格曲面
将曲面分割成网格形式,利用离散的点表示网格顶 点,然后连接这些顶点形成曲面。
隐式曲面
通过一系列方程定义曲面的几何形状,求解 这些方程得到曲面上的一系列点,然后连接 这些点形成曲面。
对于复杂的多边形或不规则形状,可能会出现填充不准确或过度填充的情况。
05
其他基本图形生成算法
椭圆生成算法
参数方程法
通过参数方程表示椭圆的几何形状,通过迭代或数值方法计算出椭 圆上的点,然后连接这些点形成椭圆。
中心点法
以椭圆中心为中心,根据椭圆的长短轴半径和旋转角度,计算出椭 圆上的一系列点,然后连接这些点形成椭圆。
THANK YOU
感谢聆听
03
圆生成算法
圆生成算法的原理
圆上取点
通过在圆周上等距离取点,并将这些点连接起来形成 多边形,最终将多边形平滑过渡成圆形。
参数方程法
利用圆的参数方程,通过计算角度和半径来获取圆上 的点。
中点圆算法
利用中点坐标和半径计算圆上的点,通过迭代的方式 逐步逼近圆周。
圆生成算法的实现
使用数学库
利用数学库中的函数来计算圆的参数方程, 获取圆上的点。
两点式方程
给定直线上的两个点,可以推导出直线的两点式方程 。
直线生成算法的实现
参数化方程
将直线上任意点的坐标示为 参数方程的形式。
参数值计算
根据起点和终点坐标,计算参 数值。
绘制点
根据参数值,在屏幕上绘制对 应的点。
直线生成算法的优缺点
优点
简单易实现,适用于各种类型的直线 。

《计算机图形学》02 基本图形生成

《计算机图形学》02 基本图形生成

例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 3)-(8,7)直线的点阵
-4
-3
-2
-1
0
1
2
3
4
5
作业: 作业: (1)对圆心为原点,半径为7的圆,生成其1/8圆弧段上的点。 (2)写出完整的Bresenham画圆算法计算步骤(圆心为(x0,y0),半径 为r,生成圆周上的全部点) (3)对圆心为(2,5),半径为6的圆,生成全部圆周点。 (4)写出Bresenham算法完整的画圆程序: DrawCricle(int x0,int y0,int r)
(2,2)-(5,7)直线的点阵
10 9 8 7 6 5 4 3 2 1 0
0
1
2
3
4
5
6
7
8
9
10
作业: 作业: (1)用Bresenham算法生成 4),(8, 8)之间的直线。写出计算过 用 算法生成(2, , 之间的直线。 算法生成 之间的直线 程并画出点阵图。 程并画出点阵图。 (2)用Bresenham算法生成 2),(7, 8)之间的直线。写出计算过 用 算法生成(3, , 之间的直线。 算法生成 之间的直线 程并画出点阵图。 程并画出点阵图。 (3)写出陡峭向上的 写出陡峭向上的Bresenham画线函数 画线函数void DrawLine2(…)。 写出陡峭向上的 画线函数 。 (4)写出陡峭向下的 写出陡峭向下的Bresenham画线算法的计算步骤。 画线算法的计算步骤。 写出陡峭向下的 画线算法的计算步骤

计算机图形学 第二章 二维基本图形的生成与二维区域的填充

计算机图形学 第二章 二维基本图形的生成与二维区域的填充
• 这两个距离差是 • d1-d2=2m(xi+1)-2yi+2b-1
2013-10-21
(2-10)
22
2.1.2 生成直线的Bresenham算法
• 我们来分析公式(2-10): (1)当此值为正时,d1>d2,说明直线上 理论点离(xi+1,yi+1)象素较近,下一个象素 点应取(xi+1,yi+1)。 (2)当此值为负时,d1<d2,说明直线上 理论点离(xi+1,yi)象素较近,则下一个象素 点应取(xi+1,yi)。 (3)当此值为零时,说明直线上理论点 离上、下两个象素点的距离相等,取哪个 点都行,假设算法规定这种情况下取(xi+1, yi+1 2013-10-21 )作为下一个象素点。 23
2.1.2 生成直线的Bresenham算法
• 我们首先讨论m=△y/△x,当0≤m≤1且 x1<x2时的Bresenham算法。从DDA直线算 法可知这些条件成立时,公式(2-2)、(2-3) 可写成: • xi+1=xi+1 (2-6) • yi+1=yi+m (2-7) • 有两种Bresenham算法思想,它们各 自从不同角度介绍了Bresenham算法思想, 得出的误差判别式都是一样的。
2013-10-21 11
2.1.1 生成直线的DDA算法
二、直线DDA算法思想: 选定x2-x1和y2-y1中较大者作为步进方向 (假设x2-x1较大),取该方向上的增量为一个象素 单位(△x=1),然后利用式(2-1)计算另一个方向 的增量(△y=△x· m=m)。通过递推公式(2-2)至(2 -5),把每次计算出的(xi+1,yi+1)经取整后送到显 示器输出,则得到扫描转换后的直线。 之所以取x2-x1和y2-y1中较大者作为步进方 向,是考虑沿着线段分布的象素应均匀,这在下 图中可看出。

基本图形生成算法原理

基本图形生成算法原理

基本图形生成算法原理现在的计算机能够生成各种复杂的图形,但无论其多么复杂,它都是由一些基本图形组合而成的。

因此,学习基本图形的生成算法是掌握计算机图形的基础。

本章就主要讨论一些基本图形的生成原理,如点、直线、椭圆生成。

如前面所述,目前我们使用的主要图形输出设备显示器(一般为光栅图形显示器)和打印机(喷墨、激光打印机)本质上是一种画点设备,是由一定数量的网络状细小光点(即像素)组成,使某些像素亮(将帧缓存中对应位置的值为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 是直线的斜率。

计算机图形学第二章基本图形的生成与计算ppt课件

计算机图形学第二章基本图形的生成与计算ppt课件
• M在Q的上方-> P1离直线更近更近->取P1 • M与Q重合, P1、P2任取一点。
P2 Q
P=(xp,yp) P1
• 问题:如何判断M与Q点的关系?
直线中点画线法
假设直线方程为:ax+by+c=0 其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 由常识知:
Fx, y0 Fx, y0 Fx, y0
Dy
1a True 1b False 2a Ture 2b False
1
m
1/m 1
-1
m
-1/m 1
3a True 3b False 4a Ture 4b False
-1
-m
-1/m -1
1
-m
1/m -1
表2.1
研究表2.1的数据,可以得到如下规律:
1、当|dx|>|dy|时
|Dx|=1 ,|Dy|=m
直线中点画线法
画线从(x0, y0)开场,d的初值
d0=F(x0+1, y0+0.5)= a(x0 +1)+b(y0 +0.5)+c
a+0.5b
= F(x0, y0)+a+0.5b =
由于只用d 的符号作判断,为了只包含整数运 算,
可以用2d代替d来摆脱小数,提高效率。
直线中点画线法
void Midpoint Line (int x0,int y0,int x1, int y1,int color)
否则
|Dx|=1/m ,|Dy|=1
2、Dx,Dy的符号与dx,dy的符号相同
依据上述规律可以生成直线,每生成一条直线 做两次除法,画线中的每点做两次加法,所以 DDA算法生成直线的速度还是很快的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档