插补算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
只包括整数的加法、减法和左移(乘2) 操作,效率高。 适合用硬件实现
五、并行画线算法
方法一: 有p个处理器。将线段沿着x方向分为p个区 段,分段水平宽度为 ∆xp= (∆x+np-1)/p 其中∆x为水平宽度 再将这p个区段按照从左向右的次序依次编 号为0,1,…,p-1,则编号为p的区段的起点的x 坐标 xp=x0+k* ∆xp
二、笛卡尔坐标系和设备坐标系中 相关概念的区别
(1)像素点
· 在几何学中,点没有准数,没有大小,只表示了在坐 标系统中的一个位置。· 在图形系统中,点要由数值坐 标表示。如二维中的点(x,y),三维系统中的 (x,y,z)。其中x,y,z为实数。 像素:像素即图像元素。 像素不是几何意义中的点, 永远存在,只有颜色的变化。均匀地分布在显示表面。 像素的坐标是整数值。 画点不是绘制点本身,而是将选择距该点最近的像素, 并赋一个颜色值。 注意:点是实数世界中的信息;像素显示世界中的信息。
第二节、直线的扫描转换
光栅图形显示器显示一条直线时,实际上 是将最逼近于该直线的像素点选中,并赋予 相应的颜色或灰度值。
直线显示图
一、逐点比较法
基本思想:在绘制直线过程中,每绘制一个 点就与原直线进行比较,根据比较的结果决 定下一步的走向,这样一步一步逼近直线。 该算法执行中要使得每一个绘制点尽可 能靠近直线而不发生远离直线的趋向。由一 点到下一点的走向方法有在X,Y方向上同时 走一步,或只在X方向上走一步,或只向Y 方向走一步。
并行画线算法
计算编号为p的区段的起点的y坐标yp和判别式fi 的初始值。 区段的高度∆yp=k*∆xp yp=y0+round(i*∆yp) ei=di-0.5 =k*i*∆xp-round(i*∆yp)+k-0.5 fi=2*∆x*ei =2*∆y*i*∆xp-2*∆x*round(i*∆yp)+2* ∆y- ∆x round(i*∆yp)=int(i*∆yp+0.5) =(2*∆y*i*∆xp+∆x) div(2*∆x)
偏差计算
① 一般公式 线段终点为点A(xA, yA),画笔当前位置为点 M(xM,yM)
d<0 : y=y+1, x=x d≥0 : x=x+1, y=y ∵ xM· xA>0(第一象限) ∴ FM=yMxA-yAxM
在逐点比较法法中要考虑的问题
(1)如何计算偏差和辨别偏差:
d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5) +c 当d<0时,M在L(Q点)下方,取P2为下一个
像素; 当d>0时,M在L(Q点)上方,取P1为下一个 像素; 当d=0时,选P 或P 均可,约定取P1为下一 1 2 个像素;
若当前像素处于d≥0情况,则取正右方像素 P1(xp+1, yp),要判下一个像素位置,应计算 d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)=d+a 增量为a。 若d<0时,则取右上方像素P (x +1, y +1)。 2 p p 要判断再下一像素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ,增 量为a+b。 画线从(x , y )开始,d的初值 d =F(x +1, 0 0 0 0 y0+0.5)=F(x0, y0)+a+0.5b,因 F(x0, y0)=0, 所以d0=a+0.5b。
4.规范坐标系
在通用图形软件包中使用的用来描述物体 数据所采用的坐标系。 目的是为了使通用图形软件包摆脱对具体 物理设备的依赖性,也为了便于在不同应 用和不同系统之间交换图形信息。 坐标单位任意取,坐标取值范围是[0, 1]区间。 笛卡儿坐标系与屏幕坐标系的转换 屏幕(x,y)=(x笛卡儿+x最大分辨率/2, y最大分辨率/2- y笛卡儿)
Bresenham算法所用误差项的几何含义
举例:用Bresenham方法扫描转换连接两 点P0(0,0)和P1(5,2)的直线段。 x y e=d-0.5 d=d+k 0 0 -0.5 1 0 -0.1 2 1 -0.7 3 1 -0.3 4 2 -0.9 5 2 -0.5
举例:用DDA方法扫描转换连接两点P0 (0,0)和P1(5,2)的直线段。 x int(y+0.5) y+0.5 0 0 0 1 0 0.4+0.5 2 1 0.8+0.5 3 1 1.2+0.5 4 2 1.6+0.5
四、Bresenham算法
直线斜率在0~1之间,该方法类似于中点法, 由一个误差项符号决定下一个象素点。 算法原理:过各行各列象素中心构造一组虚 拟网格线。按直线从起点到终点的顺序计算 直线与各垂直网格线的交点,然后确定该列 象素中与此交点最近的象素。 巧妙之处在于采用增量计算,使得对于每一 列,只要检查一个误差项的符号,就可以确 定该列的所求象素。
wenku.baidu.com
Δy Δx x1 x2
y2
y1
并行画线算法(二)
Linelength=(∆x2+∆y2)1/2 d 小于某个设定值,该像素就被设置成指 定的线段颜色。 这种并行画线算法特别适合于画具有一定 宽度的线段。
第三节、圆的扫描转换算法
一、基础知识 给出圆心坐标xc, yc,和半径r,逐点画出一 个圆周的公式有下列两种: 1、直角坐标法: (x-xc)2+(y-yc)2=r2 由上式导出 y= 当x-xc从-r到r作加1递增时,就可以求出对 应的圆周点的y坐标。但是这样求出的圆周 上的点是不均匀的;|x-xc|越大,对应生成 圆周点之间的圆周距离也就越长。因此,所 生成的圆不美观。
绘图元素
构成图形的基本元素,主要有点、直线、圆和曲线等。 图形元素包含的信息:
①图元的类型 ②图元的几何信息 ③图元的非几何信息; ④图元的指针信息
1、点 2、位置 3、像素 4、直线 5、曲线 6、填充
图形基元包括:
一级图形元素
点、线
多边形、曲线、 字符串 实心图形 (或称图形填充)
二级图形元素
p个区段可以由p个处理器同时用划线算法画出。
并行画线算法(二)
让每一个处理器处理一组像素 适用于系统中的处理器非常多的场合 给定一条线段,可以得到它的包围 盒,包围盒中共有∆x*∆y个像素。 让每个处理器处理一个像素,设像 素的坐标为(x,y),则像素到线段的垂 直距离 d=A*x+B*y+C 其中,A=-∆y/linelength 线段的包围盒 B=∆x/linelength C=(x1∆x-y1∆x)/linelength
一、基础知识
2、极坐标法:
x=xc+r·cosθ y=yc+r·sinθ 当θ 从0 度到360 作加1递增时,由此式便 可求出圆周上均匀分布的360个点的x, y坐 标。利用圆周坐标的对称性,此算法还可以 简化:将圆周分为8个象限。只要将第1a象 限中的圆周光栅点求出,其余7部分圆周就 可以通过对称法则计算出来。
二、笛卡尔坐标系和设备坐标系中 相关概念的区别
⑵直线 · 在笛卡尔坐标中的直线,如(1.2, 1.6), (6, 4) · 在屏幕坐标中的直线:用最逼近直线上的像素 点表示。
三、设计图形扫描转换时应注意:
1、笛卡尔坐标系和设备坐标系中的区别 方向性、有限性、像素点、纵横比 2、直线要直 设计算法时,应选择最靠近直线的可寻址点来 逼近直线。 3、直线的起点、终点要准确 除了提高设备的精度外,也要从算法上保证绘 图的误差最小。 4、 直线的亮度和色泽要均匀 5、 画线速度要快
列坐标象素为xi,其行坐标为yi。下一个象素 的列坐标为xi+1,行坐标要么为yi,要么递增 1为yi+1。 是否增1取决于误差项d的值。误差项d的初值 d0=0,x坐标每增加1,d的值相应递增直线 的斜率值k,即d=d+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时,取当前象素(xi,yi)的右上方象素(xi +1,yi+1);而当e<0时,取(xi,yi)右方象 素(xi+1,yi)。
当MAX{|Xi-XA|,|Yi-YA|}≤ε时结束。
二、中点画线算法
假定直线斜率k在0~1之间,当前像素点为 (xp,yp),则下一个像素点有两种可选择 点P1(xp+1,yp)或P2(xp+1,yp+1)。 若P1与P2的中点(xp+1,yp+0.5)为M,Q 为理想直线与x=xp+1垂线的交点。当M在 Q的下方时,则取P2应为下一个像素点; 当M在Q的上方时,则取P1为下一个像素 点。这就是中点画线法的基本原理。
第一节、扫描转换算法
一、 坐标系
1.用户坐标系 在实际世界中用来描述物体的位置、形状等。坐 标单位任意,坐标值是实数、范围不限。 2.笛卡尔坐标系(直角坐标系) 在计算机图形学中使用用来描述物体。 3.设备坐标系 在某一特定设备上用来描述物体,如显示器的屏 幕坐标系,绘图仪的绘图坐标系。坐标单位为像 素、步长,即设备的分辨率。坐标值是整数,有 固定的取值范围。
举例:用中点画线方法扫描转换连接两点P0 (0,0)和P1(5,2)的直线段。 a=y0-y1=-2; b=x1-x0=5; d0=2*a+b=1;d1=2*a=-4;d2=2*(a+b)=6 ,
xy 00 10 21 31 42
d 1 -3 3 -1 5
三、数值微分(DDA)法
设过端点P0(x0 ,y0)、P1(x1 ,y1)的直线段为L(P0 ,P1), 则直线段L的斜率
L的起点P0的横坐标x0向L的终点P1的横坐标x1步进, 取步长=1(个象素),用L的直线方程y=kx+b计算相应的 率 y坐标,并取象素点 (x,round(y))作为当前点的坐标。因 为: yi+1 = kxi+1+b = k1xi+b+k△x = yi+k△x 当△x =1; yi+1 = yi+k。当x每递增1,y递增k(即直线斜 率)。 需要进行浮点数运算; 运行效率低; 不便于用硬件实 现。
在计算机中上述两个公式所示的方法
生成圆周都颇费时 。
圆心在0,0点圆周生成时的对称变换
二、正负法画圆弧
将平面上的圆点划分成三个点集, G- : f(X,Y)<0 G0:f(X,Y)=0 G+ :f(X,Y)> 0 基于这种将平面分成正负区域性质来生 成图形的方法称为正负法。
中点画线法每步迭代涉及的象素和中点示意图
中点画线法的实现
过点(x0,y0)、(x1, y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下 方,只要把M代入F(x,y),并判断它的符号即 可。
设 δ=tgβ-tgα 有 1.δ=0时,点在直线上,走X 方向一步; 2.δ>0时,点在直线上方,也走X 方向一步; 3.δ<0时,点在直线下方,走Y 方向一步。
(2)如何辨别绘制到终点以结束算法。 可用计数器,值为MAX(ΔX/△t,ΔY/△t),在计长 方向上每走一步计数器减1,直到计数器值为零 则结束算法。
第四章、基本图形生成算法
教学目的: 1、知道图形生成中的基本问题; 2、熟练掌握直线的扫描转换、圆与椭圆的 扫描; 3、掌握区域填充; 4、了解线宽与线型的处理。
在光栅显示器上显示的任何一种图形,实 际上都是一些具有一种或多种颜色的象素 的集合。 生成算法即图形设备生成图形的方法,也 叫光栅化或或图形的扫描转换,是确定一 个象素集合及其颜色,用于显示一个图形 的过程。确定一个象素集合及其颜色,用 于显示一个图形的过程,称为图形的扫描 转换或光栅化。 对图形的扫描转换分为两部分:先确定像 素,再用图形的颜色或其他属性进行某种 写操作。