计算机图形学5(陈永强)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中点Bresenham画圆
判别式的初始值
d 0 F ( x0 1, y0 0.5) F (1, R 0.5) 1 ( R 0.5) R
2 2
1.25 R
36
改进:用d-0.25代替d
y y=x R
x
图5.12 1/8圆弧
27
圆的扫描转换
简单方程生成圆弧
中点Bresenham算法
28
简单方程产生圆弧
算法原理:利用其函数方程,直接离散计算。 圆的函数方程为: x
2
y R
2
2
xi1 xi 1
x 0, R
2百度文库2 i 1
2
(5 - 7)
29
yi1 round( R x )
d F ( xM , yM ) F ( xQ , yQ ) yM kxM b ( yQ kxQ b) yM yQ
d 0 d 0 d 0
y M yQ y M yQ y M yQ
P(xi,yi)
Pu(xi+1,yi+1) Q M(xi+1,yi+1/2) Pd(xi+1,yi)
简单方程产生圆弧
圆的极坐标方程为:
x R cos y R sin
i 1 i (为一固定角度步长 ) xi 1 round( R cos i 1 ) yi 1 round( R sin i 1 )
30
中点Bresenham画圆
给定圆心在原点,半径为整数R的圆,其方程为
x y R
2 2
2
构造函数F(x,y)=x2+y2-R2。 对于圆上的点,有F(x,y)=0; 对于圆外的点,F(x,y)>0; 而对于圆内的点,F(x,y)<0。
31
y
Pu P M Pd
x
图5.13 中点Bresenham画圆的原理
中点Bresenham画圆
构造判别式:
d F ( xM , yM ) F ( xi 1, yi 0.5) ( xi 1)2 ( yi 0.5)2 R2
2
图形生成的概念
图形的生成:是在指定的
输出设备上,根据坐标描
述构造二维几何图形。
图形的扫描转换:在光栅
显示器等数字设备上确定
图5.1 用象素点集逼近直线
一个最佳逼近于图形的象
素集的过程。
3
5.1 直线的扫描转换
直线的绘制要求
(1)直线要直; (2)直线的端点要准确,无定向性无断裂; (3)直线的亮度、色泽要均匀; (4)画线的速度要快; (5)具有不同的色泽、亮度、线型等。
(x0+1,y0+0.5) (x0,y0)
图5.9 计算初值
16
中点Bresenham算法——改进
改进:用2d△x代替d ,令D=2d△x 则:
D0 2xd0 2x (0.5 k ) x 2y d 0 D0 D 2xd 2x ( d 1 k ) 2xd 2x 2y D 2x 2y d 0 D0
9
中点Bresenham算法
算法原理:根据直线的斜率确定或选择变量在 x或y方向上每次递增一个单位,而另一方向的 增量为1或0,它取决于实际直线与相邻象素
点的距离,这一距离称为误差项。
10
假定0≤k≤1, 即0≤ Δy/Δ x ≤1,x是最大位移方向
Pu(xi+1,yi+1) Q M(xi+1,yi+1/2) P(xi,yi) Pd(xi+1,yi)
• E初=-0.5*2△x=-△x • 每走一步有E=(e+k)*2△x=E+2△y • if (e>0) then E=(e-1)*2△x=E-2△x
改进的Bresenham算法——算法步骤
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-△x、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为 e+2△y,判断 e的符号。若 e>0,则 (x,y) 更新为 (x+1,y+1),同时将 e 更新为 e-2△x;否 则(x,y)更新为(x+1,y)。
17
D 2xd 2x ( d k ) D 2y
中点Bresenham算法——算法步骤
输入直线的两端点P0(x0,y0)和P1(x1,y1)。
计 算 初 始 值 △ x、△y、D=△x-2△y、x=x0、 y=y0。
绘制点(x,y)。判断D的符号。若D<0,则(x,y)更 新为 (x+1,y+1),D 更新为 D+2△x-2△y;否则 (x,y)更新为(x+1,y), D更新为D-2△y。
当d≤0时,下一点取Pu(xi +1,yi); 当d>0时,下一点取Pd(xi +1,yi-1)。
33
yi
P
误差项的递推(d≤0)
yi-1 yi-2 xi
2 2
d 2 F ( xi 2, yi 0.5)
( xi 2)2 ( yi 0.5)2 R 2
xi+1 xi+2
(e 0) (e 0)
误差项的计算 • d初=0, • 每走一步:d=d+k • if (e>0) then d=d-1
• e初=-0.5, • 每走一步有e=e+k。 • if (e>0) then e=e-1
改进2:用E=2e△x来替换e
• e初=-0.5 • 每走一步有e=e+k • if (e>0) then e=e-1
19
改进的Bresenham算法
k k k k k d d d d
图5.10 改进的Brensemham算法绘制直线的原理
改进的Bresenham算法——原理
xi 1 xi 1 y yi 1 i 1 yi (d 0.5) (d 0.5)
4
直线的扫描转换
解 决 的 问 题 : 给 定 直 线 两 端 点 P0(x0,y0) 和
P1(x1,y1),画出该直线。
数值微分法
中点Bresenham算法
改进的Bresenham算法
5
5.1.1数值微分法(DDA法)
直线的微分方程:
dy Δy y1 y 0 k dx Δx x1 x 0
误差项的计算 d初=0, 每走一步:d=d+k 一旦y方向上走了一步,d=d-1
21
改进1:令e=d-0.5
xi 1 xi 1 y yi 1 i 1 yi (d 0.5) (d 0.5)
xi 1 xi 1 y yi 1 i 1 yi
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
图5.14 d≤0的情况
2
d 2 ( xi 1 1) ( yi 0.5) R
2 2 2
( xi 1) 2 xi 3 ( yi 0.5) R d1 2 xi 3
yi
P
误差项的递推(d>0)
yi-1 yi-2
2 2
d 2 F ( xi 2, yi 1.5)
当直线没有画完时,重复上一步骤,否则结束。
程序演示
18
5.1.3改进的Bresenham算法
假定直线段的0≤k≤1
1 xi 1 xi x xi x xi 1 x 1 yi 1 yi y yi y yi k x
图5.8 误差项递推
d 2 F ( xi 2, yi 0.5) yi 0.5 k ( xi 2) b
d1 k d 2 yi 0.5 k ( xi 1) b k
中点Bresenham算法
初始值d的计算
d 0 F ( x0 1, y0 0.5) y0 0.5 k ( x0 1) b y0 kx0 b k 0.5 0.5 k
第五章 基本图形生成算法
如何在指定的输出设备上根据坐标描述构造基 本二维几何图形(点、直线、圆、椭圆、多边 形域、字符串及其相关属性等)。
1
第五章 基本图形生成算法
图形生成的概念 直线段的扫描转换 圆的扫描转换
椭圆的扫描转换(自学)
多边形的扫描转换与区域填充 属性处理 反走样技术(自学) 在OpenGL中绘制图形
max(|△x|,|△y|)=|△y|,此时|k|≥1:
1 1 xi 1 xi x xi x xi y k 1 yi 1 yi y yi y yi 1 y
数值微分法(DDA法)——特点
增量算法 直观、易实现 不利于用硬件实现
2
2 2
( xi 2) ( yi 1.5) R
2 2 2
xi
2
xi+1 xi+2
d 2 ( xi 1 1) ( yi 0.5 1) R
2
图5.15 d>0的情况
2
( xi 1) 2 xi 3 ( yi 0.5) 2( yi 0.5) 1 R ( xi 1) ( yi 0.5) 2( xi yi ) 5 d1 2( xi yi ) 5
图5.7 误差项递推
d 2 yi 0.5 k ( xi 1) b 1 k d1 1 k
误差项的递推(d≥0)
d1 F ( xi 1, yi 0.5) yi 0.5 k ( xi
(x i+2,yi+0.5) 1) b (xi+1,yi+0.5) (xi,yi) d>=0
y
yi+1 ε△y yi xi ε△x xi+1 x
xi 1 xi x yi 1 yi y
ε=1/max(|△x|,|△y|)
图5.2 DDA算法原理
6
max(|△x|,|△y|)=|△x|,即|k|≤1的情况:
1 xi 1 xi x xi x xi 1 x 1 yi 1 yi y yi y yi k x
8
5.1.2中点Bresenham算法
直线的方程
y y1 y0 F ( x, y) y kx b 0 , 其中k x x1 x0
y F(x,y)=0 F(x,y)>0 F(x,y)<0 x F(x,y)<0 F(x,y)=0 F(x,y)>0 x y
图5.3 直线将平面分为三个区域
图5.4 Brensemham算法生成直线的原理
判别式:
d F ( xM , yM ) F ( xi 1, yi 0.5) yi 0.5 k ( xi 1) b
则有:
xi1 xi 1 yi 1 yi1 y i
(d 0) (d 0)
5.当直线没有画完时,重复步骤3和4。否则结束。
24
5.2 圆的扫描转换
解决的问题:绘出圆心在原点,半径为整数R
的圆x2+y2=R2。
25
y=-x
(-y,x)
y
(y,x)
y=x
(-x,y) (-x,-y)
(x,y)
(x,-y)
(-y,-x)
(y,-x)
图5.11 八分法画圆
圆的扫描转换
解决问题:
图5.6 Brensemham算法生成直线的原理
误差项的递推(d<0)
d1 F ( xi 1, yi 0.5) yi 0.5 k ( xi 1) b
d 2 F ( xi 2, yi 1.5) yi 1.5 k ( xi 2) b
(x i+2,yi+1.5) (xi+1,yi+0.5) (xi,yi) d<0