Если вас беспокоят исключительные случаи других методов, вот пуленепробиваемый метод, который приводит к строке:
- , чьи пиксели всегда соприкасаются друг с другом по всей длине линии (пиксели являются 8 соседями друг к другу),
- плотность линии не зависит от дополнительного параметра , но определяется гибко для обеспечения гарантии с первой точки.
<Ч />
Входы (удобно для создания функции из этого кода):
img
- матрица, содержащая изображение,
x1
, y1
, x2
, y2
- координаты конечных точек рисуемой линии.
Код:
% distances according to both axes
xn = abs(x2-x1);
yn = abs(y2-y1);
% interpolate against axis with greater distance between points;
% this guarantees statement in the under the first point!
if (xn > yn)
xc = x1 : sign(x2-x1) : x2;
yc = round( interp1([x1 x2], [y1 y2], xc, 'linear') );
else
yc = y1 : sign(y2-y1) : y2;
xc = round( interp1([y1 y2], [x1 x2], yc, 'linear') );
end
% 2-D indexes of line are saved in (xc, yc), and
% 1-D indexes are calculated here:
ind = sub2ind( size(img), yc, xc );
% draw line on the image (change value of '255' to one that you need)
img(ind) = 255;
<Ч />
Вот пример изображения с тремя линиями, нарисованными на нем: