直线软光栅算法之DDA(Digital Differential Analyzer)直线微分法
直线微分法软光栅
- 1.关于光栅化
- 2.关于DDA算法(只讨论直线斜率 k>=0并且直线两端点x不相等的情况)
- 3.对于斜率 k=0并且直线两端点x不相等的情况)
一种根据直线微分算法生成光栅化离散点的过程
给定直线两端坐标P0(x0, y0), P1(x1, y1),可以得到直线微分方程
dy / dx = (y1 - y0) / (x1 - x0) = k
在知道直线起点坐标的情况下,就可以得到构成直线一系列点坐标
假定当前点坐标Pi(0, 0), 那么下一个点的像素坐标就是Pi1(1, 0 + k),
每画一个点x累加1,y累加k,但是k是小数,还需要对y进行取整
用伪代码写出来就是
float y = pos1_.y(); int x = pos1_.x(); do { draw_point(QPoint(x, (int)roundf(y))); x += 1; y += k; } while (x 1 与 1 >= k >= 0 的情况分别处理
对于k>1的情况
假定当前点坐标Pi(0, 0), 那么下一个点的像素坐标就是Pi1(0 + 1 / k, 1)
也就是y累加1,x累加1/k,同样也需要对x进行取整
伪代码表示
float x = pos1_.x(); int y = pos1_.y(); do { draw_point(QPoint((int)roundf(x), y)); y += 1; x += 1.0f / k; } while (y
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...