为什么我的简单画线算法比 Bresenham 更快
Why is my naive line drawing algorithm faster than Bresenham
我实现了简单的画线算法和 bresenham 算法。当我 运行 程序有 1000 行时,朴素的画线算法比 bresenham 算法快。谁能解释为什么?
这是我的两种方法的代码
def simpleLine(x1, y1, x2, y2):
dy = y2-y1;
dx = x2-x1;
x = x1
m = dy/dx;
b = y1-m*x1;
if(x1>x2):
x1,x2 = x2,x1
x=x1
while(x<=x2):
y=m*x+b;
PutPixle(win,x,round(y));
x=x+1
'
def BresenhamLine(x1, y1, x2, y2):
dx = abs(x2 - x1)
dy = abs(y2 - y1)
p = 2 * dy - dx
duady = 2 * dy
duadydx = 2 * (dy - dx)
x = x1
y = y1
xend = x2
if(x1 > x2):
x, y,xend = x2, y2,x1
while(x < xend):
PutPixle(win,x,y)
x =x+1
if(p<0):
p = p + 2*dy
else:
y = y-1 if y1>y2 else y+1
p = p+2*(dy-dx)
Bresenham 的算法是为与您的 python 环境具有不同性能特征的语言和机器发明的。特别是浮点数学比整数数学和分支昂贵得多的系统上的低级语言。
在 Python 中,您的简单版本速度更快,即使它使用浮点数和舍入,因为 Python 速度慢并且每个像素执行的 python 操作更少。单个整数或浮点运算之间的任何速度差异与仅执行 python 东西的成本相比相形见绌。
我实现了简单的画线算法和 bresenham 算法。当我 运行 程序有 1000 行时,朴素的画线算法比 bresenham 算法快。谁能解释为什么? 这是我的两种方法的代码
def simpleLine(x1, y1, x2, y2):
dy = y2-y1;
dx = x2-x1;
x = x1
m = dy/dx;
b = y1-m*x1;
if(x1>x2):
x1,x2 = x2,x1
x=x1
while(x<=x2):
y=m*x+b;
PutPixle(win,x,round(y));
x=x+1
'
def BresenhamLine(x1, y1, x2, y2):
dx = abs(x2 - x1)
dy = abs(y2 - y1)
p = 2 * dy - dx
duady = 2 * dy
duadydx = 2 * (dy - dx)
x = x1
y = y1
xend = x2
if(x1 > x2):
x, y,xend = x2, y2,x1
while(x < xend):
PutPixle(win,x,y)
x =x+1
if(p<0):
p = p + 2*dy
else:
y = y-1 if y1>y2 else y+1
p = p+2*(dy-dx)
Bresenham 的算法是为与您的 python 环境具有不同性能特征的语言和机器发明的。特别是浮点数学比整数数学和分支昂贵得多的系统上的低级语言。
在 Python 中,您的简单版本速度更快,即使它使用浮点数和舍入,因为 Python 速度慢并且每个像素执行的 python 操作更少。单个整数或浮点运算之间的任何速度差异与仅执行 python 东西的成本相比相形见绌。