首页 > 编程语言 > 详细

直线的光栅化算法

时间:2017-01-07 08:12:23      阅读:440      评论:0      收藏:0      [点我收藏+]

  给定起点技术分享和终点技术分享,直线的光栅化算法要找出哪些像素应该被着色。简单起见,这里假设技术分享

一、直观的方法

       当直线的斜率技术分享时,直线在技术分享向的变化速率小于在技术分享方向上的变化速率,因此可以遍历技术分享技术分享间的每一个技术分享,计算对应的技术分享值并将其四舍五入画点。算法伪代码如下:

k = (y2 - y1) / (x2 - x1)
y = y1
for x = x1 to x2
    draw_point(x, round(y))
    y += k

而当技术分享时,必须交换技术分享技术分享的地位——遍历技术分享的取值,每次迭代计算对应的技术分享

二、Bresenham算法

       假设技术分享,每当技术分享时,对应的要绘制点的技术分享坐标要么保持不变,要么增加1或减小1(简单起见,这里假设技术分享,即只可能不变或增加1)。我们需要给出一个判断条件,判断什么时候该增加1、什么时候该保持不变。

       常见的方法是使用中点进行比较。假设保持不变时绘制的点坐标为技术分享,那么技术分享增加1时坐标应为技术分享,容易知道连接这两个点的线段的中点为技术分享。现假设直线与技术分享的交点坐标为技术分享,那么就可以将技术分享与之比较——若技术分享,就保持不变,否则增加1。这样判断的结果是我们总是选择离精确点更近的那个像素进行着色。

       由于每一轮迭代中技术分享的增量都是1,因此技术分享的增量是技术分享。我们维护一个变量技术分享,表示技术分享的值。每次迭代技术分享都减小技术分享,一旦发现技术分享小于零,就意味着应当使技术分享增加1,对应地技术分享的值也要加1。算法伪代码如下:

k = (y2 - y1) / (x2 - x1)
d = 0.5
n = y1
for m = x1 to x2
    draw_point(m, n)
    d -= k
    if(d < 0.0)
        n += 1
        d += 1

直线的光栅化算法

原文:http://www.cnblogs.com/AirGuanZ/p/6258253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!