Bresenham直线算法

Posted 帅气无敌朋子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bresenham直线算法相关的知识,希望对你有一定的参考价值。

Bresenham直线算法

Bresenham概述

根据前一个已知坐标\\((x_i,y_i)\\)进行增量运算到\\((x_{i+1},y_{i+1})\\)主位移方向上每次递增一个单位,另一个方向的增量为0或者1,这里取0还是1由像素点与直线的距离决定的,距离称为误差项,用字母\\(d\\)表示。

\\[ y_{i+1}=\\left\\{ \\begin{array}{rcl} y_i+1 & & {e_{i+1} >= 0}\\\\ y_i & & {e_{i+1} < 0} \\end{array} \\right. \\]

其中,\\(e_{i+1}=d_{i+1}-0.5\\)

缺点

会出现走向现象

  • 走样:由离散量表示连续量而引起的失真,称为走样
  • 走样只能减轻,不能消除。

反走样算法

像素点距离光栅交点越近,该像素点颜色与直线颜色越接近,亮度越小;越远颜色相差越大,亮度越大。

颜色插值原理

  • 线性插值
    P点的颜色可以用线性插值表示为:

\\[P=(1-t)P_0 +tP_1 \\]

其中,\\(x\\)方向有:

\\[x=(1-t)x_0+tx_1 \\]

\\[t=\\frac{x-x_0}{x_1-x_0} \\]

\\(y\\)方向有:

\\[y=(1-t)y_0+ty_1 \\]

\\[t=\\frac{y-y_0}{y_1-y_0} \\]

颜色插值的表达式为:

\\[c=(1-t)c_0+tc_1 \\]

\\(x\\)方向与\\(y\\)方向带入,得到:

\\[c=\\frac{x_1-x}{x_1-x_0}c_0+\\frac{x-x_0}{x_1-x_0}c_1 \\]

\\[c=\\frac{y_1-y}{y_1-y_0}c_0+\\frac{y-y_0}{y_1-y_0}c_1 \\]

人机交互——引力域技术

  • 引力域技术:一种自动捕捉技术
  • 人机交互技术还有:回显、约束、橡皮筋、拖动、草拟、旋转等等。

以上是关于Bresenham直线算法的主要内容,如果未能解决你的问题,请参考以下文章

Bresenham画线算法

bresenham算法的原理

bresenham算法的介绍

直线的中点Bresenham算法的实现

[AlgorithmStaff] Bresenham快速直线算法

Bresenham算法