二维线图元的生成

1. 图元

  • 图形描述:复杂图形既可以看作是若干点组成,也可以看作是由线段等基本几何机构组成。
  • 图元:包含坐标和其它属性信息的基本几何结构称为图元,即最基本的图形元素。
  • 图元的生成,是从图元的参数表示形式(由图形软件包的使用者指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。这个过程也成为扫描转换,主要工作包括确定像素集合及其颜色,显示图形对象。

2. 图形的扫描转换

光栅图形显示器可以看作一个像素的矩阵,在光栅图形显示器上显示任何一种图像,实际上都是一些具有一种或多种颜色的像素集合,确定最佳逼近图像的像素集合,并用指定的属性写像素的过程称为图像的扫描转换或光栅化。确定一个像素集合,用于显示一个图形的过程。
在这里插入图片描述

  • 裁剪:确定一个图形的哪些部分在窗口内,哪些部分在窗口外。

3. 直线段的扫描转换算法

确定最佳逼近于该直线的一组像素,且按扫描线顺序,对这些像素进行操作。

  • 光栅扫描显示器的本质决定了它难以生成完美的直线段,也不能保证直线段精确地通过起点和重点。

直线的绘制要求:

  • 直线要直:要求具有精确的起点和终点。
  • 直线无方向性:从起点绘制到终点的直线段与从终点绘制到起点的直线段要重合。
  • 直线的亮度、色泽要均匀。
  • 画线的速度要快:即尽量使用加减法整数运算,避免乘、除、开方、三角等复杂运算,但随着计算机处理浮点数与整数的速度趋于一致,这点要求在减弱。

解决的问题:给定直线的两个端点,画出该直线。

3.1 直接求交法

假定直线的起点、终点分别为: P 0 ( x 0 , y 0 ) , P 1 ( x 1 , y 1 ) P_0(x_0, y_0),P_1(x_1, y_1) P0(x0,y0)P1(x1,y1),且都为整数。则直线的参数方程为:
y = k x + b y = kx + b y=kx+b
k = y 1 − y 0 x 1 − x 0 , b = x 1 y 0 − x 0 y 1 x 1 − x 0 k = \frac{y_1 - y_0}{x_1 - x_0},b = \frac{x_1y_0 - x_0y_1}{x_1 - x_0} k=x1x0y1y0b=x1x0x1y0x0y1
在这里插入图片描述

  • 以1个像素为单位分割区间 [ x 0 , x 1 ] [x_0, x_1] [x0,x1],得到 { x i } i = 0 n \{x_i\}^n_{i=0} { xi}i=0n
  • 利用直线方程计算 { y i } \{y_i\} { yi}
  • y i y_i yi取整,得到像素集 { x i , y i , r } \{x_i, y_{i,r}\} { xi,yi,r}

特点

  • 直观,但算法复杂度高,计算速度满,因为每一步需要一次浮点乘法、浮点加法和一次取整运算。
  • 容易造成隔行显示。
    dlaXhpbl80NjU4MTUxNw==,size_16,color_FFFFFF,t_70)

3.2 DDA算法

  • 增量算法:在一个迭代算法中,如果每一步的 x , y x, y x,y值是用前一步的加上一个增量来获得,则称为增量算法。
  • DDA(Digital DIfferential Analyzer, 数值微分法)算法就是一个增量算法。

特点

  • x x x每递增1, y y y递增 k k k(即直线斜率)。
  • y i − 1 y_{i-1} yi1 y i y_i yi得到,不需要通过直线方程进行计算,避免了浮点乘法运算。
  • ∣ k ∣ > 1 |k|>1 k>1时,仍然避免不了隔行现实的问题。
  • y 、 k y、k yk必须是浮点数,且每一步都必须对 y y y进行舍入取整,不利于硬件实现。

避免隔行显示:
y i = k x i + b y i + 1 = k x i + 1 + b     = k ( x i + 1 ) + b = k x i + k + b = k x i + b + k y_i = kx_i + b \\ \qquad y_{i+1} = kx_{i+1} + b \\ \qquad \qquad \quad \ \ \ = k(x_i + 1) + b \\ \qquad \qquad \quad= kx_i + k + b \\ \qquad \qquad \quad= kx_i + b + k yi=kxi+byi+1=kxi+1+b   =k(xi+1)+b=kxi+k+b=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值