当前位置:文档之家› 直线圆的各种插补算法

直线圆的各种插补算法

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时,选P1或P2均可,约定取P1为下一 个像素;
� 若当前像素处于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时,则取右上方像素P2(xp+1, yp+1)。 要判断再下一像素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ,增量 为a+b。
� 画线从(x0, y0)开始,d的初值 d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因 F(x0, y0)=0, 所以d0=a+0.5b。
方向上每走一步计数器减1,直到计数器值为零 则结束算法。
ε � 当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为下一个像素点。 这就是中点画线法的基本原理。
� 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
只包括整数的加法、减法和左移(乘2) 操作,效率高。 适合用硬件实现
五、并行画线算法
方法一:
� 有p个处理器。将线段沿着x方向分为p个区
点、线
一级图形元素
多边形、曲线、 字符串 实心图形 (或称图形填充)
二级图形元素
第一节、扫描转换算法
一、 坐标系
1.用户坐标系 � 在实际世界中用来描述物体的位置、形状等。坐
标单位任意,坐标值是实数、范围不限。 2.笛卡尔坐标系(直角坐标系) � 在计算机图形学中使用用来描述物体。 3.设备坐标系 � 在某一特定设备上用来描述物体,如显示器的屏

= yi+k△x
� 当△x =1; yi+1 = yi+k。当x每递增1,y递增k(即直线斜 率)。
� 需要进行浮点数运算; 运行效率低; 不便于用硬件实 现。
� 举例:用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
� 在计算机中上述两个公式所示的方法 生成圆周都颇费时 。
圆心在0,0点圆周生成时的对称变换
二、正负法画圆弧
� 将平面上的圆点划分成三个点集, � G- : f(X,Y)<0 � G0:f(X,Y)=0 � G+ :f(X,Y)> 0 � 基于这种将平面分成正负区域性质来生
� 举例:用中点画线方法扫描转换连接两点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 d � 00 1 � 1 0 -3 � 21 3 � 3 1 -1 � 42 5
三、数值微分(DDA)法
中点画线法每步迭代涉及的象素和中点示意图
中点画线法的实现
� 过点(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),并判断它的符号即可。
� 设过端点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
� 对图形的扫描转换分为两部分:先确定像 素,再用图形的颜色或其他属性进行某种 写操作。
绘图元素
� 构成图形的基本元素,主要有点、直线、圆和曲线等。 图形元素包含的信息:
①图元的类型 ②图元的几何信息 ③图元的非几何信息; ④图元的指针信息
1、点 2、位置 3、像素 4、直线 5、曲线 6、填充
图形基元包括:
四、Bresenham算法
� 直线斜率在0~1之间,该方法类似于中点法, 由一个误差项符号决定下一个象素点。
� 算法原理:过各行各列象素中心构造一组虚 拟网格线。按直线从起点到终点的顺序计算 直线与各垂直网格线的交点,然后确定该列 象素中与此交点最近的象素。
� 巧妙之处在于采用增量计算,使得对于每一 列,只要检查一个误差项的符号,就可以确 定该列的所求象素。
� ∴ FM=yMxA-yAxM
在逐点比较法法中要考虑的问题
(1)如何计算偏差和辨别偏差:
设 δ=tgβ-tgα 有 1.δ=0时,点在直线上,走X 方向一步;
2.δ>0时,点在直线上方,也走X 方向一步; 3.δ<0时,点在直线下方,走Y 方向一步。
(2)如何辨别绘制到终点以结束算法。 � 可用计数器,值为MAX(ΔX/△t,ΔY/△t),在计长
� 令e=d-0.5,e的初值为-0.5,增量为k。当 e≥0时,取当前象素(xi,yi)的右上方象素(xi +1,yi+1);而当e<0时,取(xi,yi)右方象 素(xi+1,yi)。
Bresenham算法所用误差项的几何含义
� 举例:用Bresenham方法扫描转换连接两 点P0(0,0)和P1(5,2)的直线段。
第四章、基本图形生成算法
教学目的: 1、知道图形生成中的基本问题; 2、熟练掌握直线的扫描转换、圆与椭圆的
扫描; 3、掌握区域填充; 4、了解线宽与线型的处理。
� 在光栅显示器上显示的任何一种图形,实 际上都是一些具有一种或多种颜色的象素 的集合。
� 生成算法即图形设备生成图形的方法,也 叫光栅化或或图形的扫描转换,是确定一 个象素集合及其颜色,用于显示一个图形 的过程。确定一个象素集合及其颜色,用 于显示一个图形的过程,称为图形的扫描 转换或光栅化。
d=A*x+B*y+C 其中,A=-∆y/linelength
B=∆x/linelength C=(x1∆x-y1∆x)/linelength
并行画线算法(二)
Linelength=(∆x2+∆y2)1/2
d小于某个设定值,该像素就被设置成指 定的线段颜色。
这种并行画线算法特别适合于画具有一定 宽度的线段。
第二节、直线的扫描转换
� 光栅图形显示器显示一条直线时,实际上 是将最逼近于该直线的像素点选中,并赋予 相应的颜色或灰度值。
直线显示图
一、逐点比较法
� 基本思想:在绘制直线过程中,每绘制一个 点就与原直线进行比较,根据比较的结果决 定下一步的走向,这样一步一步逼近直线。
� 该算法执行中要使得每一个绘制点尽可能 靠近直线而不发生远离直线的趋向。由一点 到下一点的走向方法有在X,Y方向上同时走 一步,或只在X方向上走一步,或只向Y方 向走一步。
� 列坐标象素为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)。
段,分段水平宽度为 ∆xp= (∆x+np-1)/p
其中∆x为水平宽度
� 再将这p个区段按照从左向右的次序依次编 号为0,1,…,p-1,则编号为p的区段的起点的x 坐标 xp=x0+k* ∆xp
并行画线算法
� 计算编号为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)
� 像素:像素即图像元素。 像素不是几何意义中的点, 永远存在,只有颜色的变化。均匀地分布在显示表面。 像素的坐标是整数值。
� 画点不是绘制点本身,而是将选择距该点最近的像素, 并赋一个颜色值。
� 注意:点是实数世界中的信息;像素显示世界中的信息。
相关主题