之前我们使用DDA来画线, 这种算法每步只进行一个加法运算,那么加法运算李里边有浮点数, 我们是否还可以再提高效率 也就是把浮点运算变成整数加法, 或者改变直线方程类型

中点画线算法

利用直线的一般方程 Ax + By + C = 0
计算机图形学 之 中点画线算法
对于一般直线方程,
对于直线的点, 那么 Ax + By + C = 0
对于直线上方的点, 那么 Ax + By + C > 0
对于直线下方的点, 那么 Ax + By + C < 0

每次在最大位移方向走一步, 另一个方向走还是不走,取决于中点误差的判断

假设 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判断
计算机图形学 之 中点画线算法
对于该直线, xi的位置则是 取pi, 因为交点在 yi 到y (i+1) 的中点的下方, 下一个点则是取 pu 这个点, 因为交点在中点上方

至于如何判断中点是在直线的上方还是下方
我们就把中点坐标带入到直线方程判断是否大于零, 假设中点坐标是m, 那么就是判断
di = Amx + Bmy +C 的大小, 也就是

di = A(xi + 1) + B (yi + 0.5) + C
计算机图形学 之 中点画线算法

中点画线算法需要 四个加法,两个乘法,似乎效率也并没有多高

增量计算

1. d < 0

计算机图形学 之 中点画线算法
计算机图形学 之 中点画线算法
推导可得, d1 = d0 + A + B

2. d >= 0

计算机图形学 之 中点画线算法
推导 d1 = d0 + A

3. 计算初始值d0

计算机图形学 之 中点画线算法
计算机图形学 之 中点画线算法
d0 = A + 0.5B
由于这里还是有0.5这个计算, 而且我们只需要判断d的正负号, 所以我们可以用2d来代替d计算
也就是2d0 = 2A + B这样就全都是整数了.

相关文章:

  • 2022-12-23
  • 2021-07-22
  • 2021-09-29
  • 2021-04-30
  • 2022-12-23
  • 2021-05-18
  • 2021-05-02
猜你喜欢
  • 2022-12-23
  • 2021-05-07
  • 2022-12-23
  • 2022-12-23
  • 2021-05-12
  • 2021-10-31
相关资源
相似解决方案