第5章 基本图形生成算法--第二讲

合集下载

广工数媒计算机图形学之5基本图形生成算法-多边形扫描转换及区域填充

广工数媒计算机图形学之5基本图形生成算法-多边形扫描转换及区域填充
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充 多边形扫描转换——x-扫描线算法 x-扫描线算法填充多边形基本思路:
扫描线与x轴平行。按照扫描顺序,计算每一条扫描线与多边 形的相交区间,用指定颜色显示区间内的像素。区间的端点 可以通过计算扫描线与多边形边界线的交点获得。 x-扫描线算法可以填充凸、凹多边形,也可填充中间有空的 多边形。
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充
多边形扫描转换——x-扫描线算法
x-扫描线算法涉及的问题: 一、扫描线与多边形边界交点的 有效性判别; 扫描线y=5与AB边有无效交点k, 在做求交运算之前,判断该扫 描线的y坐标不在点A和点B的y 坐标之间,不做求交运算。
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充
区域填充——边界填充算法
栈结构实现4-连通边界填充算法步骤: (1)种子像素入栈; (2)栈顶象素出栈; (3)将出栈象素置成填充色; (4)检查出栈象素的4-邻接点,若其中某个象素点不是边 界色且未置成多边形色,则把该象素入栈。 (5)检查栈是否为空,若非空,则执行步骤(2),若为 空,则结束。 4-连通边界填充.SWF
广东工业大学机电学院图学与数字媒体工程系
计算机图形学基础:基本图形生成算法——多边形扫描转换及区域填充 填充算法——边缘填充算法
“边缘填充算法的过程.SWF”演示了边缘填充算法的实现过 程。 该算法的优点是简单,缺点是对于复杂图形,每一像素可 能要访问多次,效率降低。
广东工业大学机电学院图学与数字媒体工程系

第5章-基本图形生成算法

第5章-基本图形生成算法
新为(x+1,y+1),同步将d更新为d-1;不然(x,y)更 新为(x+1,y)。 5.当直线没有画完时,反复环节3和4。不然结束。
改善1:令e=d-0.5
yi1
xi1
yi yi
xi 1
1 (e (e
0) 0)
• e初=-0.5, • 每走一步有e=e+k。 • if (e>0) then e=e-1
若直线上旳点Q在M旳下方,阐明直线离P1近,则应取P1为下一点。 若直线上旳点Q在M旳上方,阐明直线离P2近,则应取P2为下一点,
问题:怎样判断Q在M旳什么位置?
二 别式推导:
P5
1 直线方程:
F(x,y)=ax+by+c=0
直线上旳点: F(x,y)=0
直线上方旳点: F(x,y)>0
直线下方旳点: F(x,y)<0



意 图
(xi, yi)
(xi+1, yi+k)
(xi, (int) (yi))
理想直线上旳坐标点 扫描转换后旳像素点
2 算法:
1)计算斜率 k=△y/△x 2)画第1个点(x0,y0)
3)计算下一种点(x,y)旳值P,
x=x+1, y=y+k 小数部分≥0.5, 则 y=y+1
小数部分< 0.5, 则 y=y 画点(x,y)
3)根据M2选择P4与P5之一: dk+1 = dk+a+b
4) d 旳初始值为:
d0=a+0.5b
三 进一步改善算法:
注意到初始值中有浮点运算,消除浮点能够进一步改善算法。
考察鉴别式dk,鉴别使用旳仅仅是dk旳符号,且dk旳增量都是整数, 故用2dk来替代dk,摆脱小数(浮点),从而提升速度。

计算机图形学课件第2讲:直线及圆生成算法

计算机图形学课件第2讲:直线及圆生成算法

di 0 di 0
xi1 xi 1
22
中点画线算法
例:利用中点画线算法绘制一条直线:两端点分别为P0(0,0) 、P1(5,2)。
解:首先计算斜率k=0.4 ,因为斜率k小于1,故适用推导。
a=y0-y1=-2 , b=x1-x0=5 , d0=b=5 d1=2a=-4 , d2=2(a+b)=6
M
15
中点画线算法
令M为P1和P2的中点,易知M的坐标为 (xp+1,yp+0.5)。设Q是理想直线与垂直线x=xp+1的 交点。显然,若M在Q的下方,则P2离直线近,应 取为下一个像素;否则应P1 。
16
中点画线算法
问题:判断距离理想直线最近的下一个像素点
已知:线段两端点(x0,y0),(x1,y1) 直线方程:F(x,y)=ax+by+c=0
直线及圆生成算法
光栅图形学
Display processor
Frame buffer
Video Controller
Monitor
2
光栅图形学
0 1 2 ... 0 1 2 . . .
y
x 3
光栅图形学
4
二维图形的显示
是指完成图元的参数表示形式到点阵表示形式的 转换。通常也称扫描转换图元(Scan Conversion)
setPixel( x, y ); error = error + dy; if (error >= 0) { ++y; error = error - dx ; } }
33
斜率的问题
当斜率k>1, DDA, Bresenham算法:
34

基本图形生成算法

基本图形生成算法

的A、B、C 处就会发现错判现象。
例如,在 A处,扫描线通过一点 后以为进入多边形,其实此时已出 多边形。结果是在A点之后的扫描线段上全都错误地填上 色。在B和C处,因为光栅化后,使得扫描线通过交点的 个数发生变化而同样导致填色错误。
区域填充算法:
因此,原始的奇偶判断方法需要加以周密地改善, 才能成为计算机中实用的填色算法。
填色算法分为两大类:
(1)扫描线填色(Scan-Line Filling)算法。
对应的像素集,并有指定的属性或图案显示之,即区域
填充。 光栅化和扫描转换是光栅图形学的基本问题,其算 法的好坏对系统的效率有直接关系。
直线的生成算法
在数学上,理想的直线是没有宽度的、由无数
个点构成的集合。
当对直线进行光栅化时,人们只能在显示器所
给定的有限个象素组成的矩阵中,确定最佳逼近于
该直线的一组象素,并且按扫描线顺序,用当前写
对于直线斜率k在0~1之间的情况,从给定线段的
左端点P0(x0,y0)开始,逐步处理每个后续列x位置,并
在扫描线y值最接近线段的像素上绘出一点。 假设当前直线上的像素已确定,其坐标为(x,y), 那么下一步需要在列xi+1上确定扫描线y的值。y值要 么不变,要么递增1,可通过比较d1和d2来确定。
直线的生成算法
d2=(yi+1)-y =yi+1-(k(xi+1)+b) 那么:d1- d2 = 2k(xi+1)-2yi + 2b-1 设Δ y=y1-y0 和Δ x=x1-x0 ,则 k=Δ y/Δ x,代人上式, 得:Δ x(d1- d2)= 2·Δ y·xi- 2·Δ x· yi + c
其中, c是常量,c= 2Δ y +Δ x(2b-1),与像素位置无关。

chap5 基本图形生成算法[168页]

chap5 基本图形生成算法[168页]
7
数值微分法(DDA法)
直线的微分方程:
dy Δy y1 y0 k dx Δx x1 x0
xi1 xi x yi1 yi y
ε=1/max(|△x|,|△y|)
y
yi+1
ε△y
yi
xi ε△x xi+1
x
图5.2 DDA算法原理
8
max(|△x|,|△y|)=|△x|,即|k|≤1的情况:
yi yi
1
(d 0) (d 0)
P(xi,yi)
Pu(xi+1,yi+1) Q M(xi+1,yi+1/2)
Pd(xi+1,yi)
图5.5 Brensemham算法生成直线的原理
d的意义:
d F (xM , yM ) F (xi 1, yi 0.5) yi 0.5 k(xi 1) b
第五章 基本图形生成算法
1
主要内容
如何在指定的输出设备上根据坐标描述构造基 本二维几何图形
直线、圆 多边形域 字符串 相关属性
2
图形生成的概念
图形的生成:是在指定的 输出设备上,根据坐标描 述构造二维几何图形。
图形的扫描转换:在光栅 显示器等数字设备上确定 一个最佳逼近于图形的象 素集的过程。
2xd 2x 2y D 2x 2y d 0 D0 D 2xd 2x(d k ) D 2y
20
中点Bresenham算法——算法步骤
输入直线的两端点P0(x0,y0)和P1(x1,y1)。 计算初始值△x、△y、D=△x-2△y、x=x0、y=y0。 绘制点(x,y)。判断D的符号。若D<0,则(x,y)更
22
改进的Bresenham算法

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

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

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

最新计算机地图制图原理与方法基本图形生成算法

最新计算机地图制图原理与方法基本图形生成算法

直线生成算法的改进
如何利用上述算法实现任意直线的绘制?
关于线型线宽的说明
实线就是将选到所有的点都画出来 虚线就是在所选的点中选相邻的几个画,然后
接着相邻的几个不画 点线就是在所选的点中,每隔几个就画一个 线宽只对实线有效,实际上就是根据其倾斜角
然后选定是在选中的点的(x+-width/2, y)或者(x, y+-width/2)也画出来,相当于一把近似垂直于 直线的刷子
3.2.3 生成直线的Bresenham算法
Yi+1 Yi
D
B A
C
xi
Xi+1
原理:
dd
dd
假定直线斜率,0<k<1, 起点坐标为(x,y);
下一个点亮象素可能是:(x+1,y) 或 (x+1,y+1)。这可通过 d值的大小来确定:
d = d+k, 当d>1 时 d=d-1 ;
当d<=0.5取 (x+1,y),否则取(x+1,y+1)。令e=d-0.5, 显然 e 的初值为-0.5。这样可用e的符号来进行判断。
从速度考虑,还 有那些可以改进?
e=e+2*dy; x++;
if (e≥0) { y++; e=e-2*dx}
}
}
Bresenham画线算法示例
初始值:dx=7; dy=4; k= 4/7
8
7 6
5 4
3 2
1 0
起点
0
讨论象素点的选取是 否有规律?有何用
终点
123456 7
e=-7/14 1、X0=0, Y0=0, e=1/14 2、X1=1, Y1=1, e=-5/14 3、X2=2, Y2=1, e=3/14 4、X3=3, Y3=2, e=-3/14 5、X4=4, Y4=2, e=5/14 6、X5=5, Y5=3, e=-1/14 7、X6=6, Y6=3, e=7/14 8、X6=7, Y6=4, e=1/14

《基图生成算法》课件

《基图生成算法》课件

基于规则的基图生成算法实现步骤
确定规则
首先需要明确生成图形的目标,并根据目标确定相应的规则。规则应 明确、具体,并可操作性强。
数据预处理
对原始数据进行清洗、转换和整理,使其满足规则应用的要求。数据 预处理是保证算法正确性和有效性的重要步骤。
规则应用与图形生成
按照确定的规则,逐个应用数据集,并根据规则要求生成相应的图形 结构。这一过程中可能需要迭代或动态调整规则的应用方式。
缺点
然而,基于规则的基图生成算法也存在一些局限性。例如,规则的制定可能受到领域专家主观因素的 影响,导致生成的图形缺乏客观性和公正性。此外,随着数据规模的扩大和复杂度的增加,该算法可 能需要更多的时间和资源来完成任务。
03
CATALOGUE
基于搜索的基图生成算法
基于搜索的基图生成算法原理
定义搜索空间
05
CATALOGUE
基图生成算法的性能评估
评估指标
准确率
衡量算法生成的基图与真实基图匹配程度的 指标。
F1分数
准确率和召回率的调和平均数,综合评价算 法的性能。
召回率
衡量算法能够找出真实基图中所有节点的比 例。
运行时间
评估算法执行效率的重要指标,包括单次运 行时间和平均运行时间。
评估方法
对比实验
将基图生成算法与现有算法进行对比,观察 其在准确率、召回率、F1分数和运行时间等 方面的表现。
交叉验证
将数据集分成训练集和测试集,通过多次重复实验 来评估算法的稳定性和可靠性。
可视化展示
将生成的基图与真实基图进行可视化对比, 直观地展示算法的性能。
实验结果分析
01
分析准确率、召回率和F1分数等指标,了解算法在 不同数据集上的表现。

第五章1图形显示算法基础

第五章1图形显示算法基础

点(x,y)在圆外
若F(x,y)=0
点(x,y)在圆上
x 2. F( x, y)=0 是二阶光滑
3. 每一个点的曲率半径>步长 (1 pixel) 20
y
以第一个1/4圆弧为例,取圆弧的 (0,R)
最上方点为起始点(x0,y0),
x0=0
y0=R
由当前点Pi(xi,yi)选择下一点Pi+1(xi+1,yi+1)
i=i+1
13
void line (int x1, int y1, int x2, int y2, int c) /* 参数c为直线的颜色*/
{
int dx,dy,x,y,d,const1,const2,,tmp;
int s1,s2,inter;
dx=abs(x2-x1);dy=abs(y2-y1);
yi
1
yi
xi d
起点(x0,y0)
x0 = R y0= 0
=0~2,为所画圆弧的圆心角单位为弧度 d =2-m ——角度增量,m 为整数。
缺点:所产生的圆是不封闭的,且该圆的半径有不断增大的趋势。
17
原因:
Pi+1是在Pi上加一个小的矢量而得到,这 个矢量垂直于位置矢量Pi 。
因此新的半径经常比前一个半径大,从而 得到的曲线是一条螺线。
定义di=dx(s-t)为决策变量
dx(s t) 2(r *dy q *dx) 2dy dx
9
经推导 di+1=di+2dy-2dx*(yi-yi-1 ) 起点为(0,0)时,初始值 d1=2dy-dx
如果1) 当di0,即s-t0,st,则点亮Ti, xi=xi-1+1; yi=yi-1+1;

基本图形生成算法

基本图形生成算法

Si (r 1, q)
(xi1, yi1)
y x dy dx
假设直线从 (x1, y1) 到 (x2 , y2 ) , 经变换后可表示为从 (0, 0) 到 (dx, dy) 其中 dx x2 x1 ,dy y2 y1 此时直线方程可简化为:
y dy x dx
(3 4)
将每一下标加1,即以i+1 代 i,则得:
di1 2xi dy 2 yidx 2dy dx
从 di1中减去 d i 得到:
di1 di 2dy(xi xi1) 2dx( yi yi1)
因为 xi xi1 1 ,重写上式得:
则令
dt 2m 所以
xinc dx 2m 1
yinc

dy
2m
1
即在x和y两个方向上,步长均小于1。若用硬件来实现对 称DDA法,则应用2套寄存器和加法器,将xinc和yinc分别加 到x和y的小数部分,哪个方向有整数溢出,就驱动该方向 走步。
数值微分法(DDA法)——特点
这种算法只需判断d的正负,其值的大小并不重要。 对于第一象限,因为分母 xM xA永远为正,所以只需 判断分子项的正负即可。我们得到偏差的判断公式 为:
FM yM xA yA xM
递推公式
用上式来计算偏差时,每次都要计算两次乘法,一 次减法,计算工作量还是很大的。如果我们设法用 前一点的偏差来推算走步方向以及走步以后的偏差, 则偏差计算就可以大大简化,也更适于计算机实现。 现在仍以第一象限为例,简述这种递推过程。
1
第五章 基本图形生成算法
图形生成的概念 直线段的扫描转换 圆的扫描转换 多边形的扫描转换与区域填充

第5章基本图形生成算法共118页文档

第5章基本图形生成算法共118页文档

2019/9/21
华中理工大学计算机学院 陆枫
6
99-7
(round(xi+1/k),yi+1)
(xi,yi)
(xi+1,round(yi+k))
图5-3 DDA算法生成直线段
程序 注意:
round(x)=(int)(x+0.5)
2019/9/21
华中理工大学计算机学院 陆枫
7
99-7
特点: 增量算法 直观、易实现 不利于用硬件实现
新为(x+1,y+1),同时将e更新为e-2△x;否则(x,y) 更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。
2019/9/21
华中理工大学计算机学院 陆枫
24
99-7
程序 几种画线算法的比较
2019/9/21
华中理工大学计算机学院 陆枫
25
99-7
5.2 圆的扫描转换
2019/9/21
华中理工大学计算机学院 陆枫
18
99-7
yi1

xi1 xi yyii 1
1 (d (d
0.5) 0.5)
误差项的计算 • d初=0, • 每走一步:d=d+k • 一旦y方向上走了一步,d=d-1
2019/9/21
华中理工大学计算机学院 陆枫
14
99-7
初始值d的计算
d0 F(x0 1, y0 0.5) y0 0.5 k(x0 1) b y0 kx0 b k 0.5 0.5 k
2019/9/21
华中理工大学计算机学院 陆枫
15
99-7

【华科 计算机图形CG_99958】5.基本图形生成算法

【华科 计算机图形CG_99958】5.基本图形生成算法

1)直线DDA算法 (即微分算法)
直线中每一点坐标都可由前一点坐标变化一个增量(dx, dy)而得到,即表示为递归式: xi+1 = xi+ dx,yi+1=yi+ dy,并有关系: d y = k ·d x,递归式的初值为直线的起点(x1, y1),考虑象素 为整数,则算法过程为:(k为斜率)
△x= x2-x1, △ y=y2-y1,k= △ y/ △x yi+1 = kxi+1+b = k(xi+1)+b = yi+k dx = 1 注意 (xi , yi)→(xi+1 , yi+k)
一旦 d≥1,就把它减去1,这样保证 d 在 0、1 之间; 当 d ≥ 0.5 时,直线与垂线 x = xi + 1 交点最接近于当前象素 (xi,yi) 的右上方象 素 ( xi+1,yi+1 ); 而当 d < 0.5 时,更接近于右方象素 ( xi+1,yi ) 。 为方便计算,令e =d-0.5(e 的初值为-0.5,增量为 k; e>=0.5时, e -= 1) 当e ≥ 0 时,取当前象素 (xi,yi)的右上方象素(xi+1,yi+1); 而当 e < 0 时,取 ( xi,yi )右方象素 ( xi+1,yi )。
int x=0; y=r; float d=1.25-r; drawpixel(x, y,color); while(x<y) {
if(d<0) { d+=2*x+3; x++; }
else { d+=2*(x-y)+5; x++; y--; }
drawpixel(x, y, color); } }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

x y 2 1 2 a b
写成函数方程的形式为: f(x, y) = b2x2 + a2y2 - a2b2 = 0 f(x, y) < 0, 点(x, y)位于椭圆内 f(x, y) = 0, 点(x, y)位于椭圆上 f(x, y) > 0, 点(x, y)位于椭圆外
2
2
p0(0,b)
以弧上斜率为-1的点作为分 界将第一象限椭圆弧分为上
2、p1在圆上,p2在圆内部; 3、p1在圆外部,p2在圆内部; 4、p1在圆外部,p2在圆上; 5、p1在圆外部, p2在圆内部;
4 5
P2(x+1, y-1)
1
P(x, y)
2
P1(x+1, y)

误差判据
以像素点到圆心的距离平方与半径R平方之差ð 为误差进行比较,则: ðp1 = (x+1)2 + y2 – R2
p1 p1
(10)
p p2
第三章 基本图形的光栅化生成算法

上机实习作业
采用Bresenham画线算法在屏幕中心绘制一个 完整的圆; 采用中点法在屏幕中心绘制一个完整的椭圆。 只能使用SetPixel函数。

区域1的情况
中点法构造判别式
D = f(M) = f(x+1, y-0.5) = b2(x+1)2 + a2(y-0.5)2 - a2b2 D<0, 选择p1点
D>=0, 选择p2点
p(x, y)
(6)
p1(x+1, y)
M(x+1, y-0.5)
p2(x+1, y-1)
区域1的情况
递推算法实现: 初始值x = 0, y = b, 代入公式(6),得 D = D0 = b2(0+1)2 + a2(b-0.5)2 - a2b2
= b2 + a2(-b + 0.25)
(7)
对于下一个点,如果D < 0, 选取p1, 如图所示, 此时, D1 = b2(x+2)2 + a2(y-0.5)2 - a2b2
= b2(x+1)2 + a2(y-0.5)2 - a2b2 + b2(2x+3) = D + b2(2x+3) (8)
如果D >= 0,下一个点选取p2, 如 图所示, 此时,
对于下一个点,如果D < 0, 选 取p1, 则下一个象素判断的三 个点p, p1, p2之间的关系变化 如图所示, 此时, D1 = 2(x+1)2 + 4(x+1) + 2y2 - 2y – 2R2 + 3 = 2x2 + 4x + 2y2 - 2y – 2R2 + 3 + 4x + 6
= D + 4x + 6
= D + 4x - 4y + 10 (5)

Bresenham方法比中点法的优势
p1(x+1, y)
p(x, y)
p(x, y)
p1(x+1, y)
M(x+1, y-0.5) p2(x+1, y-1) p2(x+1, y-1)

误差判据更加准确
椭圆的光栅化生成--中点法
X方向长半轴为a,y方向短半轴为b的椭圆方程:
D<0, 选择p2点
D>=0, 选择p1点
p(x, y)
p2(x+1, y-1) p1(x, y-1)
M(x+0.5, y-1)
区域2的情况
递推算法实现:
p p2
前一个点沿用由区域1得到的点
对于下一个点,如果D < 0, 选取p2, 此时递推关系如图 所示, 可得 D1= D + 2b2(x+1) + a2(3 – y) 同理,如果D >= 0, 选取p1, 递推关系如右图所示, 可得 D1= D + a2(3 –2 y) (11)
ðp2 = (x+1)2 + (y-1)2 – R2
p(x, y)
(1)
p1(x+1, y)
p2(x+1, y-1)

D = ðp1 + ðp2, 分析判式对应的位置关系:
当D < 0时, 只能对应1,2,3三种情形,其中1,2 情况下,取p1, 只需判断3的情况。 第3种情况下,因ðp1>0, ðp2<0,则如 D < 0, 可得出p2点距离圆弧远,取p1; 同理,当D > 0时, 对应3,4,5三种情形,其中4, 5情况下,取p2; 1 3的情形,如果 D > 0, 可得出p1点 距离圆弧远,取p2;
第三章 基本图形的光栅化生成算法
第二讲 圆和椭圆的生成
圆的光栅化生成

提出问题
在屏幕上绘出圆心在原点,半径为整数R的圆 圆的方程: x +y y=-x
(-x, y)
y
(x, y)
y=x
图1. 八分法 示意图
(-y,x) (y, x)
(-y,-x)
(y,-x)

2 2 2
则若F(M)<0 若F(M)>0 p2为下一个像素
p1为下一个像素
p(x, y) p1(x+1, y)
M(x+1, y-0.5)
p2(x+1, y-1)

构造判别式
d = F(M) M(x+1, y-0.5)
F(x, y) = x2 + y2 - R2 = F(x+1, y-0.5)
因为从(0,R)点开始,所以d的初始值 d0 = F(1, R-0.5) = 1 + (R-0.5)2 – R2 = 1.25 - R

算法实现(八分法的第二个八分圆)
1、算法开始,输入圆的半径R; 2、初始化d = d0 = 1.25 – R, x = 0, y = R; 并绘制点(x, y); 3、判断是否x > R/1.414, 满足条件则退 出,程序结束; 4、判断d的符号:如果d < 0, 选取并绘制p1点, 然后令d = d + 2x + 3; 如果d >= 0, 选取并绘制p2点, 然后令d = d + 2(x – y) + 5; 返回到3;
(-x,-y)
(x,-y)
圆的光栅化生成-- 简单方程产生圆弧

算法原理:

利用函数方程,直接离散计算 圆的函数方程:x + y = R
2 2 2
xi 1 xi 1
x 0, R
2 2 i 1

2

yi 1 round ( R x )
圆的光栅化生成-- 简单方程产生圆弧

整数化改进
使用d = d – 0.25代替d; 则原来的初始化d = 1.25 – R变为d = 1 – R; d<0 变为 d<-0.25; 由于d的初始值为整数,运算过程中的增量也 是整数,因此d始终是整数,则d<-0.25等价 于d<0; 因此整个函数完全可以改造成整数实 现。
p(x, y)
2 4
p1(x+1, y)
5
p2(x+1, y-1)
增量关系式推导:
一般关系式展开: D = ðp1+ ðp2 = (x+1)2 + y2 – R2 + (x+1)2 + (y-1)2 – R2 = 2x2 + 4x + 2y2 - 2y – 2R2 + 3; (2)
起始点为p(0,R),p1(1, R), p2(1, R-1), 此时对应的D初始值 D = D0 = 3 – 2R (3)
圆的极坐标方程为:
x R cos y R sin
i 1 i ( 为一固定角度步长) xi 1 round ( R cos i 1 ) yi 1 round ( R sin i 1 )
圆的光栅化生成-- 中点画线法产生圆弧

算法立足点
= ( x+1 )2 + (y-0.5)2 – R2 当d<0,取p1,再下一个像素的判别式为:
d1 = F(x+2, y-0.5) = ( x+2 ) + (y-0.5) – R
= ( x+1 )2 + (y-0.5)2 – R2 + 2x + 3 = d + 2x + 3
2
2
2
当d>=0,取p2,则再下一个像素的判别式为: d = F(x+2, y-1.5) = ( x+2 )2 + (y-1.5)2 – R2 = ( x+1 )2 + (y-0.5)2 – R2 + 2x – 2y + 5 = d + 2(x - y) + 5
从(0,R)点,顺时针开始; 上一个确定像素点为p(x, y),则在该二分 之一象限内,下一个像素点只能是p1和p2中 的一个;

p(x, y) p1(x+1, y)
p2(x+1, y-1)

构造函数
F(x,y) = x + y - R 对于圆外的点(x,y), F(x, y) > 0; 对于圆内 的点F(x, y) < 0; 设M为p1和p2的中点,则M为( x+1, y-0.5);
D1 = b2(x+2)2 + a2(y-1.5)2 - a2b2 = b2(x+1)2 + a2(y-0.5)2 - a2b2 + b2(2x+3)+a2(2-2y)
相关文档
最新文档