文档介绍:第三章二维图形基础
物体的形状和颜色可用象素矩阵或直线线段和多边形填充区域等基本几何结构来描述。点和直线段是最简单的几何成分,其它可供构造图形的输出图元有圆及其它圆锥曲线、二次曲面、样条曲线和曲面、多边形填充区域以及字符串等。而二维图形的生成是三维图形生成的基础,研究计算机生成图形需先从二维图形的生成开始。下面将讨论一些基本二维图元生成技术和算法,以光栅图形系统的扫描转换方法为基础。
11/10/2017
1
计算机图形学演示稿纪玉波制作(C)
最基本的图形显示方式是直线方式。实际上,无论什么复杂图形,它们无非是由直线段和曲线段组成。而对于曲线及各种复杂的图形,可以将其离散成许多小直线段,连接各直线来逼近欲生成的曲线或其它复杂图形,所以一般图形都可以看成是由直线段组成。因此,直线段生成的质量好坏与速度快慢将直接影响整个图形生成的质量和速度。在光栅显示器上显示图形是将线段上所有象素点亮的过程。如果已知直线段两个端点,可以有很多种不同的数学方法来决定应改变在两端点之间的那些象素的亮度值才能显示出两点间的直线。在绘图仪上绘直线段,主要决定X、Y方向上的位移量,这些算法之间主要区别是判别和生成x、y增量的过程和方法的不同。
11/10/2017
2
计算机图形学演示稿纪玉波制作(C)
1. 点的生成
点是图形中最基本的图素,直线、曲线以及其它的图元都是点的集合。在几何学中,一个点既没有大小,也没有维数,点只是表示坐标系统中一个位置。在计算机图形学中,点是用数值坐标来表示的。在直角坐标系中点由(x,y) 两个数值组成的坐标表示,在三维坐标系中点是由(x,y,z)三个数值组成的坐标表示。
在输出设备上输出一个点,就要把应用程序中的坐标信息转换成所用输出设备的相应位置。对于一个CRT监视器来说,输出一个点就是要在指定的屏幕位置上打开电子束,使该位置上的荧光点亮。
在PC机中,点亮屏幕上一个点是由BIOS控制完成的,各种程序语言中都有描点语句。例如C语言为putpixel(x,y,color)。
11/10/2017
3
计算机图形学演示稿纪玉波制作(C)
2. DDA直线生成算法(digital differential analyzer)
直线是点的集合,在几何学中直线被定义为两个点之间的最短距离。也就是说一条直线是指所有在它上面的点的集合。直线是一维的,即它们具有长度但没有面积。直线可以向一个方向及其相反的方向无限伸长,这不是计算机图形学中所需要的,在图形学中研究的对象是直线段。已知线段的起点坐标(x1,y1),终点坐标(x2,y2),这两点就确定了一条线段。
一般来讲,任何图形输出设备都能准确地画出水平线X和垂直线Y,或对角线,但要画出一条准确斜线不是件容易的事。在光栅系统中,线段通过象素绘制,水平和垂直方向的台阶大小受象素的间隔限制。这就是说,必须在离散位置上对线段取样,并且在每个取样位置上决定距线段最近的象素,画一条直线实际上就计算出来一系列与该线靠近的象素。
11/10/2017
4
计算机图形学演示稿纪玉波制作(C)
直线的点斜式方程为:
y﹦m·x﹢b
其中,m表示直线的斜率,b是y轴截距。给定线段的两个端点(x1,y1)和(x2,y2),可以计算斜率m和截距b:
m﹦(y2﹣y1)/(x2﹣x1)
b﹦y1﹣m·x1
对任何沿直线给定的x的增量△x,对应的y增量△y:
△y﹦m·△x
同样,对应于y的增量△y,x的增量△x为:
△x﹦(1/m)△y
11/10/2017
5
计算机图形学演示稿纪玉波制作(C)
DDA直线生成算法是一种基于上述直线方程的线段扫描转换算法。在一个坐标轴上以单位间隔增量,决定另一个坐标轴上最靠近线段路径的对应整数值。为了使产生的直线光滑,应使X、Y两方向上每一步的增量都不大于一个单位,因此当|m|≤1时,应该使用x做自变量,而当|m|>1时应该使用y做自变量。也就是说应该选定x2﹣x1和y2﹣y1中绝对值较大者作为步进的控制量。假定x2﹣x1的绝对值大于y2﹣y1的绝对值,取x为一个象素单位长,即x 每次递增一个象素,然后利用下式计算相应的y值:
yk+1﹦yk﹢△y﹦yk﹢m·△x
对于|m|>1的线段,可通过计算由Y方向的增量△y引起的改变来生成直线:
xk+1﹦xk﹢△x﹦xk﹢m·△y
11/10/2017
6
计算机图形学演示稿纪玉波制作(C)
DDA直线生成算法的伪语言描述如下:
begin
if abs(x2﹣x1)≥abs(y2﹣y1)
then lenght﹦abs(x2﹣x1)
else
lenght﹦abs(y2﹣y1)
endif
△x﹦(x2﹣x1)/le