Лучший алгоритм построения линий - PullRequest
0 голосов
/ 21 мая 2018

Недавно мне пришлось написать алгоритм для рисования линий по вертикали, горизонтали и 45 градусов.Я хотел, чтобы этот алгоритм работал как можно быстрее, поэтому я расширил все возможные случаи:

if (x0 == x1){
    ...
  }
else if (y0 == y1)
  {
    ...
  }
else {
  if (distance(x0,x1) == distance(y0,y1)){
    ...
  }
}

и, конечно, это не СУХОЙ и не чистый ...

Что самое чистоеи лучшая версия алгоритма, подобного этому?

Обратите внимание, что если линия не вертикальная, горизонтальная или 45 градусов, функция ничего не должна делать (поэтому ничего похожего на растровый алгоритм).

Пример объявленияможет быть line(int x0, int y0, int x1, int y1);

1 Ответ

0 голосов
/ 21 мая 2018

Примерно так:

x_delta = ...;
y_delta = ...;
for (x=x0,y=y0; x+=x_delta, y+=y_delta; x<=x1&&y<=y1) {
  point(x,y);
}

Если вам действительно нужно избегать дополнений с нуля, вероятно, у вас все в порядке.Но тогда вы можете иметь функцию шаблонного значения и использовать ту же функцию, оптимизированную во время компиляции.

...