计算机图形学 - 第三章讲义

合集下载

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

最新计算机图形学及cad技术讲义——曲线曲面基本理论

最新计算机图形学及cad技术讲义——曲线曲面基本理论

第三讲 曲线曲面基本理论1概述(a) 飞机 (b) 船舶 (c) 汽车图 1-1 曲线曲面造型应用曲线曲面造型(Surface Modeling)是计算机辅助几何设计(Computer Aided Geometric Design, CAGD)和计算机图形学的一项重要内容,主要研究在计算机系统中如何用曲线曲面表示、设计、显示和分析物体模型。

它在航空航天、船舶、飞机、汽车等行业得到广泛应用(如图1-1所示)。

由Coons 、Bezier 等大师于二十世纪六十年代奠定其理论基础,经过三十多年的发展,曲线曲面造型现在已形成了以有理B 样条曲线曲面(Rational B-spline Surface)参数化特征设计和隐式代数曲线曲面(Implicit Algebraic Surface)表示为主体的两类方法,且以插值(Interpolation)、逼近(Approximation)手段为几何理论体系。

1.1曲线曲面表示曲线曲面可以用三种形式进行表示,即显式、隐式和参数表示,三种形式表示如下。

显式表示:形如),(y x f z =的表达式。

对于一个平面曲线而言,显式表达式可写为)(x f y =。

在平面曲线方程中,一个x 值与一个y 值对应,所以显式方程不能表示封闭或多值曲线,例如,不能用显式方程表示一个圆。

隐式表示:形如0),,(=z y x f 的表达式。

如一个平面曲线方程,隐式表达式可写为0),(=y x f 。

隐式表示的优点是易于判断函数),(y x f 是否大于、小于或等于零,也就易于判断点是落在所表示曲线上或在曲线的哪一侧。

参数表示:形如)(t f x =,)(t f y =,)(t f z =的表达式,其中t 为参数。

即曲线上任一点的坐标均表示成给定参数的函数。

如平面曲线上任一点P 可表示为)](),([)(t y t x t P =,如图1-2(a)所示;空间曲线上任一三维点P 可表示为)](),(),([)(t z t y t x t P =,如图1-2(b)所示。

第3章 图形的基本算法

第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. 如何实现人与图形的交互?
这里,图形是一个广义的概念,凡是可 以在图形设备上输出的点、线、文本等 的集合都可以称为是图形。

计算机图形学 第三章 二维图形的裁剪概述

计算机图形学 第三章 二维图形的裁剪概述

3.2.3 梁友栋-Barsky裁剪算法
式中,Δx=x2-x1,Δy=y2-y1,参数u在0~1 之间取值,P(x,y)代表了该线段上的一个 点,其值由参数u确定,由公式可知,当u=0 时,该点为P1(x1,y1),当u=1时,该点 为P2(x2,y2)。如果点P(x,y)位于由 坐标(xwmin,ywmin)和(xwmax,ywmax)所 确定的窗口内,那么下式成立: xwmin≤x1+ u· Δx≤xwmax ywmin≤y1+ u· Δy≤ywmax(3-10)
3.2.1 Cohen-Sutherland算法
► Code(int ►{
x,int y,int *c)
*c=0; if(y>ymax) /*(xmin,ymin)和(xmax,ymax) 为窗口左下角、右上角坐标。*/ *c=*c|0x08; else if(y<ymin) *c=*c|0x04; if(x>xmax) *c=*c|0x02; else if(x<xmin) *c=*c|0x01; }
► 根据直线两点式方程:

2)
(3-
3.2 线段的裁剪
► 整理后得通用交点公式: ►
(3-3)
► ►
1、与上边界的求交公式: (3-4)
3.2 线段的裁剪
► ►
2、与下边界的求交公式:
(3-5)

► ►
3、与右边界的求交公式:
(3-6) 4、与左边界的求交公式:

(3-7)
3.2.1 Cohen-Sutherla2、判别 根据C1和C2的具体值,可以有三种情况: (1)C1=C2=0,表明两端点全在窗口内,因而 整个线段也在窗内,应予保留。 (2)C1&C2≠0(两端点代码按位作逻辑乘不为 0),即C1和C2至少有某一位同时为1,表明两端点 必定处于某一边界的同一外侧,因而整个线段全在 窗外,应予舍弃。 (3)不属于上面两种情况,均需要求交点。

计算机图形学第三章课程提纲

计算机图形学第三章课程提纲

3.1 直线的扫描转换--中点画线算法直线扫描转换的速度要求尽量使用整数加减法,避免乘、除、开方、三角等复杂运算,避免取整运算。

y=kx+b(浮点乘、浮点加、取整)中点画线算法的前提起点:P0(x0,y0),终点:P1(x1,y1) 都是整数0≤k≤1,则|△x|≥|△y|,x0<x1,y0<y1增量算法x i+1=x i+1(整数)y i+1=y i+k(浮点加,取整)中点误差项y i+1= y i +1 ----中点在直线下,d i<0 y i+1= y i----中点在直线上, d i≥0 d i+1=d i+1-k , d i<0d i+1=d i-k , d i≥0d i+1中仍有浮点加令f i=2d i△xb xkyyxFdiiiii-+-+=++=)1(5.0)5.0,1(kd-=5.0整数中点误差项x i+1=x i +1y i+1= y i +1 ----中点在直线下,f i <0 y i+1= y i ----中点在直线上, f i ≥0算法算法与公式对照。

⏹ x=x0;y=y0;⏹ dx=x1-x0;dy=y1-y0; ⏹ f=dx -2*dy;//式(3-7) ⏹ for (i=1; i<=dx+1; i++)⏹ {setpixel(x,y,color); //画点,统一各变量值的位置 ⏹ x=x+1; ⏹ if (f<0)⏹ {y=y+1; //式(3-3) ⏹ f=f+2*dx;}//式(3-8) ⏹ f=f -2*dy; ⏹ }实例起点(2,1),终点(10,7),按算法给出每一点各项变量值。

y x f ∆-∆=20002221≥<⎩⎨⎧∆-∆-∆+=+i i i ii f f yf y x f fi xi yi Fi+1习题起点(3,2),终点(9,7),给出每点的i、x、y、f值。

3.2圆的扫描转换根据方程画圆假设圆心在原点,半径为R:(1)y=±√R2−x2(2) x =R ∙cosθ y =R ∙sinθ θ∈[0,2π]圆的对称性只计算第一象限上半区间的点,通过对称性画出其余的点。

计算机图形学(1-3章讲义汇总整理)

计算机图形学(1-3章讲义汇总整理)
图形显示系统
图形显示系统是计算机图形处理系统中极其重要的部分。图形显示系统负责实时显示图 形处理的中间或最终结果,为用户提供可视的工作界面等。PC 机的图形显示系统逻辑上是 由监视器(Monitor,又称显示器)和显示卡(又称显示适配器)两大部分组成。目前显示器中主 要包括阴极射线管(CRT),液晶显示器(LCD)和等离子显示器(PDP)。
图形输入板与坐标数字化仪
图形输入板与坐标数字化仪两者的工作原理与功能完全相同,它们都是将图形转变成计 算机能接收的数字量的专用设备。它们按工作原理的不同分为电磁式、超声波式、电位梯度 式、机械式等多种。数字化仪往往具在定位、拾取、选择的功能,其主要性能指标有分辨率、 精度和幅面。许多数字化仪提供多种压感。现在非常流行的汉字手写系统就是一种数字化仪。
光笔
光笔是一种手持检测光的装置,它直接在屏幕上操作,拾取位置。光笔原理简单,操作 直观,但荧光屏的分辨率、电子束扫描速度、荧光粉的特性、笔尖与荧光粉的距离和角度等 诸多因素都会影响光笔的分辨率与灵敏度。另外,光笔对于荧光屏上不发光的区域无法检测, 也不能用于液晶、等离子体等类型的显示器。
触摸屏
触摸屏利用手指等对屏幕的触摸位置进行定位。按工作原理可以分为:电阻式、电容式、 红外线式和声波表面波式。
计算机图形学的研究内容 计算机图形学的定义
计算机图形学是利用计算机来建立、处理、传输和存储从某个客观对象抽象得到的几何 和物理模型,并根据模型产生该对象图形输出的有关理论、方法和技术。1982 年,国际标 准化组织 ISO 将计算机图形学定义为:研究用计算机进行数据和图形之间相互转换的方法和 技术。
CRT 显示器
CRT 显示器由于分辨率和可靠性高、速度快、成本低等优点,多年来一直是图形显示系 统中最重要的设备。CRT 显示器的工作方式分为随机扫描和光栅扫描两种方式,目前以光栅 扫描方式为主,这是因为,虽然随机扫描图形显示器具有画线速度快、分辨率高等优点,但 难以生成具有多种灰度和颜色且色调能连续变化的图形,而光栅扫描图形显示器却可以生成 有高度真实感的图形,因而已成为 PC 机和 Macintosh 计算机以及各种工作站所使用的最重 要的信息显示设备。

计算机图形学-第三章-变换及裁剪

计算机图形学-第三章-变换及裁剪
xh hx, yh hy, h 0
(x,y)点对应的齐次坐标为三维空间的一条 直线
xh hx
yh
hy
zh h
7
齐次坐标的作用
1. 将各种变换用阶数统一的矩阵来表示。提供了用矩阵 运算把二维、三维甚至高维空间上的一个点从一个坐 标系变换到另一坐标系的有效方法。
2. 便于表示无穷远点。
例如:(x h, y h, h),令h等于0
25
3 规格化设备坐标系 用于用户的图形是定义在用户坐标系里,
而图形的输出定义在设备坐标系里,它依赖于 基体的图形设备。由于不同的图形设备有不同 的设备坐标系,且不同设备间坐标范围也不尽 相同, 例如:分辨率为1024*768的显示器其屏幕坐标的 范围:x方向为0~1023,y方向为0~767,分辨 率为640*480的显示器,其屏幕坐标范围为:x 方向0~639,y方向0~479
y 1),则
1 0 0
P'x' y' 1 x y 1 0 1 0 x
Tx1
Ty1
1
y 1Tt1
经第二次平移变换后的坐标为P*(x* y* 1)
P * x *
y * 1 x'
y'
1
1 0
0 0 1 0
Tx
2
Ty 2
1
1 0 0 1 0 0
x y 1 0 1 0 0 1 0 x y 1 Tt1Tt2
44
关于透视投影
一点透视投影
两点透视投影
三点透视投影
45
内容
二维变换 三维变换 裁剪
二维线裁剪 二维多边形裁剪 文本裁剪 三维裁剪 关于三维变换与裁剪
46
三维变换流程图

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

计算机图形学第3章二维基本图(4)

计算机图形学第3章二维基本图(4)

二、扫描线种子填充算法实现
借助于堆栈,上述算法实现步骤如下:
1、初始化堆栈。 2、种子压入堆栈。 3、while(堆栈非空) { (1)从堆栈弹出种子象素。 (2)如果种子象素尚未填充,则:
a.求出种子区段:xleft、xright; b.填充整个区段。 c.检查相邻的上扫描线的xleft≤x≤xright区间内, 是否存在需要填充的新区段,如果存在的话, 则把每个新区段在xleft≤x≤xright范围内的最 右边的象素,作为新的种子象素依次压入堆栈。 d.检查相邻的下扫描线的xleft≤x≤xright区间内, 是否存在需要填充的新区段,如果存在的话, 则把每个新区段在 xleft≤x≤xright范围内的 最右边的象素,作为新的种子象素依次压入堆 栈。 }
扫描线种子填充算法步骤 (1)种子象素入栈。 (2)栈非空时象素出栈,否则结束。 (3)对出栈象素及左、右两边象素填充,直到遇边界XL、XR。 (4)在(XL ,XR) 内查相临的上、下两条扫描线是否为边界或已填充, 如不是,则将每区间的最右边的象素入栈。回到(2)。
练习: 用扫描线种子填充算法,写出图中顺序进栈的种子坐标及 所需最大栈空间
2、国标码 我国除了采用ASCII码外,还制定了汉字编 码的国家标准字符集:中华人民共和国国家标准 信息交换编码,代号为“GB2312-80”。该字符 集共收录常用汉字6763个,图形符号682个。 它规定所有汉字和图形符号组成一个94×94 的矩阵,在此方阵中,每一行称为“区”,用区 码来标识;每一列称为“位”,用位码来标识, 一个符号由一个区码和一个位码共同标识。 区码和位码分别需要7个二进制位,同样, 为了方便,各采用一个字节表示。所以在计算机 中,汉字(符号)国标码占用两个字节。

计算机图形学完整课件

计算机图形学完整课件
x y =(a·x1+b·y1+c)+a+0.5·b
=F(x1,y1)+a+10.5·b 1
x y 但由于(x1,y1)在直线上,故F(x1,y1)=0。
因此d的初始值1 为d0=a+0.5·b 1
由于我们使用的只是d的符号,而且d的增量都是整数,只是其初 始值包含小数。因此,我们可以用2d代替d,来摆脱小数,写出仅包 含整数运算的算法:
当d<0时,M在直线下方(即在Q的下 方),故应取右上方的p2作为下一个象 素。
当d>0,则应取正右方的p1。
当d=0是,二者一样合适,可以随便取一 个。
我们约定取正右方的p1。 对 每一个象素计算判别式d,根据它 的符号确定下一象素。由于d是xp 和yp的线性函数,可采用增量计算 ,以便提高运算效率。
对于直线上的点F(x,y)=0; 对于直线上方的点F(x,y)>0; 对于直线下方的点F(x,y)<0。 因此,欲判前述Q在M的上方还是下方,只要把M代入F(x,y), 并判断它的符号。构造判别式
d=F(M)=F( , )=a( )+b( )+c
xp 1 yp 0.5
xp 1
yp 0.5
必须寻找只需做一些简单的 整数运算和判别运算的方 法即可确定圆上的象素点的算法。
考虑到圆的对称性可 以减少计算量。只要 能生成8分圆,那么圆 的其它部分可以通过 一系列的简单映射变 换得到。如图所示, 假设已知一个圆心在 原点的圆上一点(x,y),
(x, y)
( y, x)
(x, y)
(y, x)
( y, x)
( x, y)
( y,x)
( x, y)

计算机图形学第三章

计算机图形学第三章

void Bresenhamline (int x0,int y0,int x1, int y1,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; idx; i++) { drawpixel (x, y, color); x=x+1,e=e+k; if (e0) { y++, e=e-1;} } }

设备级显示算法,考虑运算方式、时间、 次数等细节。
扫描转换直线段
直线的绘制要求:
1.直线要直; 2.直线上的点要准确,即无不定向性和断裂情况; 3.直线的亮度、色泽要均匀; 4.画线的速度要快; 5.要求不同直线可具有不同的色泽、亮度、线型等。
扫描转换直线段
直线基础
我们知道:直线的笛卡儿斜率截距方程为:y=m•x+b
过各行各列象素中心构造一组虚拟网格线。按直线 从起点到终点的顺序计算直线与各垂直网格线的交 点,然后根据误差项的符号确定该列象素中与此交 点最近的象素。
d d d
d
yi 1 yi k ( xi 1 xi ) yi k 设直线方程为: ,其中k=dy/dx。 因为直线的起始点在象素中心,所以误差 项d的初值d0=0。 X下标每增加1,d的值相应递增直线的斜率值k,即d=d+k。 一旦d≥1,就把它减去1,这样保证d在0、1之间。 当d≥0.5时,最接近于当前象素的右上方象素 xi 1 , yi 1 ( ) xi 1 , yi 而当d<0.5时,更接近于右方象素( )。 为方便计算,令e=d-0.5, e的初值为-0.5,增量为k。 当e≥0时,取当前象素(xi,yi)的右上方象素 ( ); xi 1 , yi 1 而当e<0时,更接近于右方象素( xi 1 , yi )。

《计算机图形学》课件第3章

《计算机图形学》课件第3章
e′=2×e×dx
第 3 章 基本图形的生成
改进的整数型Bresenham画线算法如下: void InterBresenhamLine (int x0, int y0, int x1, int y1, int color) { int x, y, dx, dy, e;
dx=x1-x0, dy=y1-y0, e=-dx; x=x0, y=y0; while(x<=x1) {putpixel (x, y, color);
第 3 章 基本图形的生成
首先, 构造判别式: d=F(M)=F(xp+1, yp+0.5)=a(xp+1)+b(yp+0.5)+c ① 当d<0时, M在直线下方, 取P2为下一个像素; ② 当d>0时, M在直线上方, 取P1为下一个像素; ③ 当d=0时, 选P1或P2均可, 约定取P1为下一个像素。
第 3 章 基本图形的生成 图3-1 DDA算法示意图
第 3 章 基本图形的生成
例: 用DDA方法光栅化P0(0, 0)和P1(5, 2)两点间的直线段。
x
int(y+0.5) y+0.5
0
0
0+0.5
1
0
0.4+0.5
2
1
0.8+0.5
3
1
1.2+0.5
4
2
1.6+0.5
5
2
2.0+0.5
第 3 章 基本图形的生成 DDA画线算法如下: void DDALine(int x0, int y0, int x1, int y1, int color) { int x;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pk >= 0, (xk+1, yk -1)
根据公式计算Pk+1;
4) 确定对称点; 5) 重复步骤3,直至x ≥ y
中点画圆算法举例 圆半径r=10
P0= 1-10=-9
P1= -9+2*1+1=-6 k 0 1 2 3 4 5 6 Pk -9 -6 -1 6 -3 8 5 (xk,yk) (0,10) (1,10) (2,10) (3,10) (4,9) (5,9) (6,8) (7,7)
Pk < 0, 则选择yk
Pk ≥ 0, 则选择yk+1
Bresenham算法公式推导

决策参数Pk的递推公式
Pk = 2y*xk - 2x*yk + C
由 Pk+1 = 2y*xk+1 - 2x*yk+1 + C
∴ Pk+1 - Pk = 2y - 2x(yk+1 - yk);
Pk+2 y Pk+1=
setpixel(Round(x), Round(y), RED);
}
}
DDA算法 评价
比直接使用公式
y=m*x+b快 ,没有
用乘法
运算仍然耗时
设置增量的除法运算 取整操作 浮点
较长线段的误差积累
2. Bresenham算法
由Bresenham提出的一种精确而有效的光 栅线段生成算法,可用于直线、圆(圆弧)和 其它曲线的生成

pk+2(xk+1-yk+1)+1 pk≥0
r取整

p0 = 5/4 – r = 1- r
中点画圆算法的步骤
1) 输入圆半径r和圆心(xc, yc), 获得(x0, y0) = (0, r) 2) 计算P0 = 1 - r; 3) 在每个xk位置,测试计算下一个点
Pk < 0, (xk+1, yk)
直接基于圆的方程绘圆

圆的标准方程 (x-xc)2+(y-yc)2=r2 y= yc sqrt(r2-(x-xc)2)

圆的极坐标参数方程 x=xc+r cosθ y=yc+r sinθ
圆的对称性
y
(0,r)
x
3.3.2 中点画圆算法

思想 判断公式
Yi Yi-1 Yi-2
X Xi+
i
Pk+2 y Pk+1= Pk+2 y-2 x
(Pk < 0) (xk+1, yk ) (Pk ≥ 0) (xk+1, yk+1 )
5) 重复第4步,共x-1次
Bresenham算法 举例

已知直线的两个端点P1(20,10),P2(30,18),
用DDA算法使该线段光栅化。

解:dx = 10; dy = 8;
d1=y - yk=m*xk+1+b - yk =m*(xk+1)+b- yk d2= yk+1 - y=yk+1-m*(xk+1)-b
d1 - d2=2m(xk+1)-2yk+2b-1
代入m= y / x,
Bresenham 算法公式推导
d1-d2 = 2*y / x(xk+1)-2yk+2b-1
DDA算法 举例
18 17 16 15 14 13 12 11 10 20 21 22 23 24 25 26 27 28 29 30

DDA算法的C实现
#define Round(a) ((int)(a + 0.5))
void lineDDA(int xa, int ya, int xb, int yb)
fcircle(x,y)

=0 >0
pk = f(xk+1, yk-0.5) = (xk+1)2+(yk-0.5)2-r2
如果
pk < 0,选择 (xk+1, yk)
pk ≥ 0,选择(xk+1, yk-1)
中点画圆算法公式推导

pk+1 = f(xk+1+1, yk+1-0.5) = (xk+1+1)2+(yk+1-0.5)2-r2 pk+1 = pk+2(xk+1)+(yk+12-yk2)-(yk+1-yk)+1 pk+2xk+1+1 pk+1 = pk<0
P2= -6+2*2+1=-1
P3= -1+2*3+1=6 P4= 6+2*(4-9)+1=-3 P5= -3+2*5+1=8 P6= 8+2*(6-8)+1=5
中点画圆算法举例 圆半径r=10
y
10 9
8 7 6 5 4 3 2 1 0 Y=X
0 1 2 3 4 5
6 7 8 9
1 0
x
不同算法的比较
(Pk < 0)
Pk+2 y-2 x
(Pk ≥ 0)
P0 = 2y-x
Bresenham算法的步骤
1) 输入直线端点坐标(x0,y0),(xn,yn)
2) 画起始点(x0,y0);
3) 计算常量x、y、2 y 和2y - 2x, 并计算决策参数P0 =2y - x 4) 从k=0开始,在沿线路径的每个xk处,计 算Pk+1,并确定下一点(xk+1,yk+1)

思想


算法公式推导
算法描述 举例
Bresenham 算法思想
思想:只用整数计算寻找最接近实际直线的整数坐标
13 12 11 10 10 11 12 13 14 15 16
y=mx+ b
从(10,10)像素开始,绘制0<m<1直线的屏幕网格
Bresenham 算法思想
y yk+1
y=mx+b
3.2 画线算法

问题 画线算法

DDA算法 Bresenham算法
3.2 画线算法

问题
已知直线的两个端点P1(x1, y1),P2(x2, y2)
求直线的中间各点
3.2 画线算法

已知:P1(x1,y1),P2(x2,y2)
直线的笛卡尔斜率截距方程 y = m*x + b m = (y2-y1)/(x2-x1) b = y1-m*x1 y= m* x
若|m|≤1:xk+1=xk+1,yk+1=yk+m
若|m|≥1:yk+1=yk+1, xk+1=xk+1/m or :yk+1=yk-1, xk+1=xk-1/m
DDA算法 举例

已知直线的两个端点P1(20,10),P2(30,18),
用DDA算法使该线段光栅化。

解:dx = 10; dy = 8;
直线斜率满足|m|<1时,取x方向为 单位步长
递推公式为:
xk+1=xk1 yk+1=ykm
求直线中间各个像素点-沿y轴取样
y
|m|>1 y2
y1 x1 x2 x
DDA算法公式
直线斜率满足|m|>1时,取y 方向为单位步长
递推公式为:
yk+1=yk1 xk+1=xk1/m
DDA算法

画直线的DDA算法可表示为: ;xa<xb ;xa>xb ;ya<yb ; ya>yb or : xk+1=xk-1,yk+1=yk-m
Bresenham 算法举例
18 17
16
15 14
13 12 11 10 20 2122 23 2425 26 272829 30
Bresenham 算法公式修正
修正公式以适应任何方向线段的绘制

m>1,交换x和y方向的规则,y单位步长移动,
计算x

从任何端点开始绘制像素

水平线、垂直线和对角线
循环次数:steps = 10;
沿X轴单位取样:x_in= 1
Y按斜率变化: y_in = 0.8
DDA算法 举例
step k 0 1 2 3 4 5 6 7 8 9 (x,y) (20,10) (21,10.8) (22,11.6) (23,12.4) (24,13.2) (25,14) (26,14.8) (27,15.6) (28,16.4) (29,17.2) (30,18) 像素点 (20,10) (21,11) (22,12) (23,12) (24,13) (25,14) (26,15) (27,16) (28,16) (29,17) (30,18)
方程两边同乘以x
x(d1-d2) = 2 y* xk+2 y - 2 x*yk+ x(2b-1)

引入决策参数Pk表示相对距离,其值为
其中C = 2y + x*(2b-1)
Pk = x (d1-d2)=2y*xk - 2x*yk + C
Bresenham 算法公式推导

推论:
3.3 圆生成算法
圆的属性 中点画圆算法
3.3.1 圆的特性
圆的方程
(x-xc)2+(y-yc)2=r2 x=xc + r cosθ
y=yc + r sinθ
圆的对称性
y
(-y,x) (-x,y) (-x,-y)
相关文档
最新文档