并行画线算法
本来在word中是有右下数的。一编辑在csdn中编辑就没有了。
切割问题的一种解决方法是将现有的顺序算法放到多个处理器上。我们也能够寻找其它处理办法,从而使像素位置能以并行方式有效地计算。在设计并行算法中。重要的是要考虑平衡可用处理器间的处理负载。
给定np个处理器。我们能够通过把线段切割成np个子段,并在每一个子段中同一时候生成线段而建立起并行的Bresenham画线算法。
对于斜率为0 < m < 1.0且左端点坐标位置为(xo,yo)的线段。我们沿正x方向对线段进行切割。
相邻分段的起始x位置间的距离可计算为
当中。△x是线段的水平宽度。分段水平宽度△xp的值利用整数除法来计算。
将分段和处理器从0,1, 2直到np- 1编号,能够计算出第k分段的起始的、坐标为
对于这样的分段策略,有些情况下最后(最右边)的子段会比其它段小。
此外,假如线段的端点不是整数。舍入误差将导致沿线的长度产生宽度不同的分段。
为了将Bresenham算法用于各分段,须要有每一个分段的y坐标初始值和决策參数的初始值。分段y方向的变化△y。可从线段斜率m和分段宽度△xp计算得出:
那么,第k分段的起始y坐标为
第k分段起始处Bresenham算法的初始决策參数可从等式(3.14)中得到
然后,各处理器利用该分段的初始决策參数值和起始坐标(xk,yk)。计算指定的分段上的像素位置。
我们也能够通过替换m = △y/△x和又一次安排有关项,将yk和pk起始值计算中的浮点运算简化为整数运算。在y方向对线段进行分段并计算分段的起始x值。能够将并行Bresenham算法拓展到斜率大于1.0的线段。对于负斜率,则能够在一个方向递增坐标值。而在还有一方向上递减。
建立光栅系统并行算法的还有一种方法是,为每一个处理器分配一组屏幕像素。仅仅要具有足够数量的处理器,就能够将每一个处理器分配给某个屏幕区域内的一个像素。这样的方法能够通过为一个处理器分配线段坐标范围之内的一个像素并计算像素距线段的距离而移植成线段显示的方法。在线段的包围盒中的像素数目为△x.△y, (參见图3.13 )。在图3.13中。从线段到坐标(x, y)处像素的垂直距离d,能够利用下列算式得到:
当中
而且
一旦估算出线段的常量A, B和C,那么每一个处理器仅仅需完毕两次乘法和两次加法来计算像素距离d。
假设d小于指定的线段粗细參数。那么就绘制一个像素。
除了把屏幕切割成单个像素,我们也能够按线段的斜率为每一个处理器分配一条扫描线或一列像素。然后,每一个处理器计算线段与分配给该处理器的水平行或垂直列的交点。
对于斜率|m| < 1.0的线段,每一个处理器将简单地按给定的x值从直线方程中求解y。对于斜率值大于1.0的线段,处理器则依据给定的扫描线y值。从直线方程中求解x。虽然这样的直接方法在顺序算法机器中的计算速非常慢。但通过使用多处理器能十分有效地完毕这一算法。