计算机图形学(二)输出图元_3_画线算法_1_直线方程

画线算法

场景中的直线段由其两端点的坐标位置来定义。要在光栅监视器上显示一线段,图形系统必须将两端点投影到整数屏幕坐标,并确定离两端点间的直线路径最近的像素位置。接下来将颜色值装人帧缓存相应的像素坐标处。视频控制器从帧缓存读出写入的颜色值并绘制屏幕像素。这一过程将一线段数字化为一组离散的整数位置。一般而言,这些位置是实际线路径的近似。例如,计算出的线位置(10.48,
20.51)转换为像素位置(10, 21)。坐标值舍入到整数,引起除水平和垂直以外所有线段的阶梯效应(“锯齿形”),如图3.5所示。光栅线段特有的阶梯现象在低分辨率系统中特别容易看出来,而在高分辨率系统中可以得到改善。平滑光栅线段的更有效技术是基于调整线路径上的像素强度。

直线方程

根据直线的几何特征可确定直线路径的像素位置。直线的笛卡儿斜率截距方程为

显示直线的算法则以直线方程(3.1 )以及等式(3.2)和等式(3.3)给出的计算方法为基础。

对于任何沿直线给定的x增量&x,可以从等式(3.2)中计算出对应的y增量&y:

同样,可以得出对应于指定的&y的x增量&x:

这些方程形成了模拟设备(如向量扫描系统)中确定偏转电压的基础,其中有可能造成微小的偏转电压变化。对于具有斜率绝对值|m| < 1的直线,可以设置一个较小的水平偏转电压&x,对应的垂直偏转电压则可以使用等式(3.4)计算出来的&y来设定;而对于斜率值|m|> 1的直线,则设置一个较小的垂直偏转电压&y,对应的水平偏转电压则由等式(3.5)计算出来的&x来设定;对于斜率m
= 1的直线,&x = &y,因此水平偏转和垂直偏转电压相等。在每一种情况下,都可以在指定的端点间生成一条斜率为m的平滑直线。

在光栅系统中,通过像素绘制直线,水平和垂直方向的步长受到像素的间距的限制。也就是必须在离散位置上对直线取样,并且在每个取样位置上确定距直线最近的像素。图3.7给出了直线的扫描转换过程及沿x轴具有离散取样点位置。

时间: 2024-08-08 09:41:39

计算机图形学(二)输出图元_3_画线算法_1_直线方程的相关文章

计算机图形学(二)输出图元_3_画线算法_3_Bresenham画线算法

Bresenham画线算法 本来在word中是有右下数的,一编辑在csdn中编辑就没有了.                         Bresenham画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用增量整数计算.另外Bresenham算法还可用于显示圆和其他曲线.图3.8和图3.9给出了绘制线段的屏幕局部.垂直轴表示扫描线位置,水平轴标识像素列.在这个例子中,我们以单位x间隔取样,并且需要确定每次取样时两个可能的像素位置中的哪一个更接近于线路径.从图3.

计算机图形学(二)输出图元_3_画线算法_2_DDA算法

DDA算法 数字微分分析仪(digital differential analyzer, DDA)方法是一种线段扫描转换算法,基于使用等式(3.4)或等式(3.5)计算的&x或&y.在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上最靠近线路径的对应整数值.首先考虑如图3.6所示的具有正斜率的线段.例如,如果斜率小于等于1,则以单位x间隔(&x = 1)取样,并逐个计算每一个y值: 下标k取整数值,从第一个点1开始递增直至最后端点.由于m可以是0与1之间的任意实数,所以计算

计算机图形学之数字微分分析画线算法

现代计算机绘制,我们程序员经常会碰到画图的编程问题,并且现在的画图的API很多,换句话说,图形API非常丰富,从TC的graphic到Windows的GDI/GDI+,以及跨平台的开放标准OpenGL.这些API都提供了基本的绘图函数,如绘制直线,圆以及椭圆之类的. 画直线的算法也叫做直线的光栅化,我们知道,我们的计算机显示的屏幕实际上是一个个的像素组成的,绘图算法就是要在逼近直线的像素上进行着色输出. 是选择直线两端点变化较大的一个方向,从起始点开始,逐次递推得到着色的结果. DDA算法的流程

计算机图形学(二)输出图元_4_并行画线算法

并行画线算法 本来在word中是有右下数的,一编辑在csdn中编辑就没有了.                            上面讨论过的线段生成算法顺序地确定像素位置.而利用并行计算机,则可通过将计算分割到可用的多个处理器中来得到线段的像素位置.分割问题的一种解决方法是将现有的顺序算法放到多个处理器上.我们也可以寻找其他处理办法,从而使像素位置能以并行方式有效地计算.在设计并行算法中,重要的是要考虑平衡可用处理器间的处理负载. 给定np个处理器,我们可以通过把线段分割成np个子段,并在每

计算机图形学(二)输出图元_7_并行曲线算法

并行曲线算法 在曲线生成中使用的并行方法类似于显示线段中使用的方法.我们既可采用顺序算法按曲线分段分配处理器,也可以提出其他方法将处理器分配给屏幕的不同区域. 显示圆的并行中点方法是,将45°到90°的圆弧分成等长子圆弧,并给每段子圆弧配置一个处理器.然后类似于并行Bresenham画线算法,需要对每个处理器建立初始y值并确定参数pk的值.接着计算整个子圆弧的像素位置,并通过对称性得到其他八分圆中的位置.同样,并行椭圆中点算法将第一象限内的椭圆弧分割成等长弧,并将这些弧分配给各个处理器,在其他象

图形学_画线算法(DDA、Bresenham)

1. DDA算法实现直线绘制(需先安装easyx,百度下载即可) 1 #include "easyx.h" 2 #include "math.h" 3 #include "windows.h" 4 #include "stdio.h" 5 #include "stdlib.h" 6 #include "conio.h" 7 #include "graphics.h"

图形学--(中点画线法+Bresenham画线算法)

编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我们为什么不直接用直线方程分别带点再打亮呢,这是因为,计算机中每个坐标点都是整数,而直线是由一个个像素点组合而成的,那么,直接将坐标点再进行四舍五入整数化就好了啊,的确,这是一种方法,但计算机中进行浮点数的四舍五入会使运算效率变差,因此真正画直线时是用到上边这俩种方法的. 1.中点画线法 只考虑当直线

Bresenham画线算法

[Bresenham画线算法] Bresenham是一种光栅化算法.不仅可以用于画线,也可以用用画圆及其它曲线. 参考:<计算机图形学>3.5.3 Bresenham画线算法 Bresenham画线算法

两种画线算法(DDA&amp;Bersenham)

DDA(digital differential analyzer) 由直线的斜截式方程引入 对于正斜率的线段,如果斜率<=1,则以单位x间隔(δx=1)取样,并逐个计算每一个y值 Yk+1 = Yk + m   (m为由初始点确定的斜率) 对于斜率>1的线段 Xk+1 = Xk + 1/m   (m为由初始点确定的斜率) 起始端点在于右侧时 "+" -> "-" #include "stdlib.h" #include &qu