第四章基本图形生成算法(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/7/13
8 / 59
直线的扫描转换-数值微分算法(DDA,Digital Differential Analyzer)
•优点:比直接用直线方程的方法快:没有浮点乘法;
•缺点:求每个连续点时,需要浮点加法;加0.5舍尾取整,不利 于硬件实现;表示长直线时,由于精度限制-》累计误差;
© 2004 Dept. of Computer Science and Engineer
F(x, y) ax by c 0 式中 : a y0 - y1 , b x1 - x 0 , c x 0 y1 - x1y0
© 2004 Dept. of Computer Science and Engineer
2020/7/13
10 / 59
直线的扫描转换-中点画线法
▪ 直线的正负划分性
© 2004 Dept. of Computer Science and Engineer
2020/7/13
7 / 59
直线的扫描转换-数值微分算法(DDA,Digital Differential Analyzer)
复杂度:乘法 + 加法 + 取整
© 2004 Dept. of Computer Science and Engineer
直线上方点:F( x,y)>0 直线下方点: F( x,y)<0
© 2004 Dept. of Computer Science and Engineer
2020/7/13
11 / 59
直线的扫描转换-中点画线法
▪ 问题:判断距直线最近的下一个象素点 构造判别式:d=F(M)=F(Xp+1,Yp+0.5) 由d>0,<0可判定下一个象素. 如果:d = 0? 任选一个,(约定取正右方P1);
2020/7/13
4 / 59
直线的扫描转换
▪ 计算机图形学中的一条直线通常指一条线段。 ▪ 直线的扫描转换:确定一组有限象素,显示出来的过程; ▪ 线段表示方程:y = kx + b(斜截式方程)
- 斜截式方程不适合垂直线; - 水平线、垂直线、对角线(∣k∣=1)作为特殊直线考虑;
▪ 直线扫描算法:
第四章 基本图形生成算法 (一)
© 2004 Dept. of Computer Science and Engineer
2020/7/13
基本图形生成算法
▪ 图形的扫描转换:确定象素几何与颜色,用于显示图形的过程;
▪ 本章讨论基本图形的扫描转换问题:
- 点、直线、圆、椭圆的扫描转换; - 二维图形(多边形)的填充; - 字符的表示及输入、输出; - 图形的裁剪和反走样;
P2
P P1Fra Baidu bibliotek
© 2004 Dept. of Computer Science and Engineer
2020/7/13
12 / 59
直线的扫描转换-中点画线法
▪ 判定再下一个象素,分两种情形考虑: - 1)若d≥0,取正右方象素P1,再判定下一个象素,由: d1=F(Xp+2,Yp+0.5)=a(Xp+2)+b(Yp+0.5)+c = d + a,d的增量是a; - 2)若d<0,取右上方象素P2,再下一个象素由:d2=F(Xp+2,Yp+1.5)=d + a + b, d的增量为a + b
2020/7/13
2 / 59
点的扫描转换
▪ 定义:将图形区域上的数学点(x,y)->(x’,y’)的象素点; ▪ 扫描转换方法:
- 方法一: ▪ X’=Floor(x), y’=Floor(y) ▪ 取x,y的整数部分作为x’,y’ ▪ 例:P1(1.7,0.8)->(1,0); P2(2.2,1.3),P3(2.8,1.9)->(2,1)
© 2004 Dept. of Computer Science and Engineer
2020/7/13
3 / 59
主要内容:
▪ 直线的扫描转换 ▪ 圆与椭圆的扫描算法 ▪ 区域填充 ▪ 线宽与线型的处理 ▪ 字符 ▪ 裁剪 ▪ 反走样
© 2004 Dept. of Computer Science and Engineer
y-》得到(x,y); - 3、如果∣k∣>1,对(y1’,y2’)开区间的整数y代入方程得到
x-》得到(x,y);
▪ 优点:简单 ▪ 缺点:浮点运算(乘法和加法)-》计算复杂;
© 2004 Dept. of Computer Science and Engineer
2020/7/13
6 / 59
直线的扫描转换-数值微分算法(DDA,Digital Differential Analyzer)
2020/7/13
9 / 59
直线的扫描转换-中点画线法 ▪ 目标:消除DDA算法中的浮点运算(浮点数取整运算,不利
于硬件实现;DDA算法效率低); ▪ 原理:
- 1、确定与直线距离最近的点P; - 2、利用点P确定下一个点;
▪ 条件:同DDA算法 ▪ 假设斜率: k [0,1]
▪ 直线段的隐式方程 (x0 , y0 ),(x1, y1 )的两个端点
- 直接使用直线方程 - 数值微分算法 - 中点画线法 - Bresenham画线算法
© 2004 Dept. of Computer Science and Engineer
2020/7/13
5 / 59
直线的扫描转换-直接使用直线方程
▪ 最简单的方法; ▪ 步骤:
- 1、将P1,P2分别转换为象素坐标(x1’,y1’),(x2’,y2’); - 2、设置k=(y2’-y1’)/(x2’-x1’)和b=y1’-kx1’; - 3、如果∣k∣≤1,对(x1’,x2’)开区间的整数x代入方程得到
▪ 图形扫描转换步骤:
- 1)确定有关象素; - 2)用图形的颜色或其它属性,对象素进行某种写操作;
▪ 图元的生成:完成图元的参数表示形式(由图形软件包的使用者指 定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的 转换。也称扫描转换图元。
© 2004 Dept. of Computer Science and Engineer
- 方法二: ▪ X’=Floor(X+0.5),Y’=Floor(Y+0.5) ▪ 即(x,y)所在的坐标系统的原点放在象素(0,0)的中心; ▪ 所有满足X’-0.5≤X<X’+0.5和Y’-0.5 ≤Y<Y’+0.5的点都映射在象素点 (X’,Y’)处; ▪ 例:P1,p2->(2,1),p3->(3,2)
相关文档
最新文档