Почему мой наивный алгоритм рисования линий быстрее, чем Брезенхем - PullRequest
0 голосов
/ 03 февраля 2020

Я реализовал как наивный алгоритм рисования линий, так и алгоритм Брезенхэма. Когда я запускаю программу с 1000 строками, алгоритм наивного рисования линий работает быстрее, чем алгоритм Брезенхэма. Кто-нибудь может объяснить, почему? Вот мой код для обоих методов

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)

1 Ответ

1 голос
/ 03 февраля 2020

Алгоритм Брезенхема был изобретен для языков и машин с характеристиками производительности, отличными от вашей python среды. В частности, низкоуровневые языки в системах, где математика с плавающей запятой намного дороже, чем целочисленная математика и ответвления.

В Python ваша простая версия быстрее, даже если она использует с плавающей запятой и округление, потому что Python медленно и выполняет меньше python операций на пиксель. Любая разница в скорости между одно целочисленными операциями или операциями с плавающей запятой сводится к минимуму из-за стоимости всего лишь python вещей.

...