标签:就是 条件 图片 过程 step 应用 function 参数 情况
Bresenham算法是一开始用于图形学中绘制直线。无论屏幕的分辨率多么的大,它始终都是由一个个的方形像素点组成的。在屏幕上绘制一条有角度的直线时,像素点并不会都落在直线上。对于直线上的点,需要一种算法算出最接近直线上的点或者说最适合的点。BresenHam算法就是其中一种算法。这个算法只会用到较为快速的整数加法、减法和位元移位,所以非常高效。先来看一种dda算法:
function dda(x0: number, y0: number, x1: number, y1: number) {
let output = [];
let k = (y1 - y0) / (x1 - x0);
let x = x0 + 1; //x初始值
while (x <= x1) {
let y = Math.floor(k * (x + 1) + 0.5);
output.push({ x: x, y: y });
x = x + 1;
}
return output;
}
代码很少,但是运算中用到了浮点数的乘法和加法,不是一种高效的做法。
接着来看下bresenham算法的推导过程。
Bresenham算法有2种推导方法,如下图所示:
为了简单起见,设,直线方程为y = kx,也就是以起始点为坐标原点。
下面我们换另外一种推导方法。
1.设置变量d1,d2,Xi,Xi+1,Yi,Yi+1,Y,X,Hi,Hi+1
标签:就是 条件 图片 过程 step 应用 function 参数 情况
原文地址:https://blog.51cto.com/zhangzhao/2422258