⚡ Bresenham直线算法

整数运算、高效率的直线绘制算法 - 与DDA算法对比

🔴 Bresenham算法(整数运算)

🔵 DDA算法(浮点运算)

起点
终点
当前点 (Bresenham)
当前点 (DDA)

📊 Bresenham算法执行信息

点击"同时绘制两种算法"开始

📊 DDA算法执行信息

等待绘制...

⚔️ 算法对比

特性 Bresenham算法 DDA算法
运算类型 只用整数(加减法、位移) 浮点数(除法、加法)
速度 更快(整数运算快) 较慢(浮点运算慢)
精度 精确(无浮点误差) 可能有浮点累积误差
核心思想 误差项判断(增量决策) 微分方程(斜率累加)
算法复杂度 稍复杂(需要理解误差项) 简单直观
应用场景 现代图形硬件、游戏引擎 教学演示、理解原理

💡 Bresenham算法原理

核心思想:使用整数误差项来决定下一个像素的位置。

算法步骤(以斜率 0 < m < 1 为例):

  1. 计算 dx = x1 - x0, dy = y1 - y0
  2. 初始化误差项 p = 2*dy - dx
  3. 从起点开始,x每次递增1:
    • 如果 p < 0:选择右边的像素(y不变),p += 2*dy
    • 如果 p >= 0:选择右上的像素(y+1),p += 2*dy - 2*dx

为什么快?因为全程只有整数的加减法和比较,没有除法和浮点运算!

误差项的含义:代表当前点到理想直线的"距离误差"×2×dx,通过误差正负判断应该选上面还是下面的像素。