bresenham算法

Bresenham 算法画线 & 画圆

不问归期 提交于 2019-12-23 21:15:00
最近作业在做 graphics driver 涉及到 Bresenham 画线以及画圆算法,以防自己忘记了总结一些知识点以及源码。 所有代码的输入参数类型都是 unsinged int Bresenham 直线算法 在给出直线两个端点(x1, y1) 和 (x2, y2) 的情况下,选取 (x1, y1) 作为起始点, 依次确认相应的像素点。选取哪个端点作为起点是没有关系的,因为线段并不存在方向这一说,只是和斜率有关系,下面会提到。 以点 (x i , y i ) 为例,以 y 为步进单位, (x i , y i ) 的下一个像素点为 (x i +1, y i +1) 和 (x i +1, y i ) 中的一个点,那么为了确认到底应该选哪一个点,这时就要比较垂直距离 d1 和 d2 的关系。设直线的方程为 y = kx + b,其中 k=Δy/Δx, Δy = abs(y2 - y1), Δx = abs(x2 - x1)。此时 , , 接下来可以得到 在上面这个表达式中,可以发现我们涉及到了除法运算,为了消除除法运算可能引入的误差,在等式两边同时乘 Δx, 并命名为一个新的变量 其中c是最终化简得到的总的常数。此时 pi 和(d1 - d2) 同号,我们可以根据 pi 的正负来判断下一个像素点的位置: 当 pi > 0 时, d1 > d2, , 当 pi <= 0 时,d1 <

Bresenham 算法

﹥>﹥吖頭↗ 提交于 2019-12-13 18:12:44
一 Bresenham 绘直线 使用 Bresenham 算法,可以在显示器上绘制一直线段。该算法主要思想如下: 1 给出直线段上两个端点 ,根据端点求出直线在X,Y方向上变化速率 ; 2 当 时,X 方向上变化速率快于 Y 方向上变化速率,选择在 X 方向上迭代,在每次迭代中计算 Y 轴上变化; 当 时,Y 方向上变化速率快于 X 方向上变化速率,选择在 Y 方向上迭代,在每次迭代中计算 X 轴上变化; 3 现在仅考虑 情形,在 情况下仅需要交换变量即可。直线斜率 ,当 d = 0 时,为一条水平直线,当 d > 0 或 d < 0 时,需要分开讨论,如下图: 一 Bresenham 绘圆(未完) 来源: https://www.cnblogs.com/luofeiju/p/12035504.html