Bresenham直线算法原理及代码中error、e2逻辑疑问求助
Bresenham直线算法原理及代码中error、e2逻辑疑问求助
我最近一直在啃Bresenham直线算法,因为我的绘图函数要用到它,但怎么都搞不明白。
下面是维基百科上给出的一段伪代码:
plotLine(x0, y0, x1, y1) dx = abs(x1 - x0) sx = x0 < x1 ? 1 : -1 dy = -abs(y1 - y0) sy = y0 < y1 ? 1 : -1 error = dx + dy while true plot(x0, y0) if x0 == x1 && y0 == y1 break e2 = 2 * error if e2 >= dy if x0 == x1 break error = error + dy x0 = x0 + sx end if if e2 <= dx if y0 == y1 break error = error + dx y0 = y0 + sy end if end while
我能理解开头计算端点间x、y方向的距离,用sx/sy来控制绘制方向这些基础逻辑,但一碰到error值就懵了——这怎么能把x和y两个不同方向的量混在一起算啊?
我表面上大概能get到这个值会在绘制过程中来回变化,用来决定下一个像素是往上还是往下,但就是想不通x和y怎么能这么混着用。
还有那个e2,平白无故把error翻倍是为啥啊?然后还用这个翻倍后的值去和dx、dy比较,我实在转不过弯来。
我已经卡了一周了,找了快10个网站,全是贴代码的,就没一个能让我拍大腿喊“哦!原来如此!”的解释。
求大佬们用大白话给我讲讲,别搞那些数学黑话、奇怪的符号和Δ notation,就围绕坐标和直线本身说就行,万分感谢!
备注:内容来源于stack exchange,提问作者sneaker
相关产品推荐
相关产品推荐

