function [x,y] = intline(x1,x2,y1,y2)
%INTLINE Integer-coordinate line drawing algorithm.
%   [X,Y] = INTLINE(X1,X2,Y1,Y2) computes an approximation to the line
%   segment joining (X1,Y1) and (X2,Y2) with integer coordinates. X1,
%   X2, Y1, and Y2 should be integers. INTLINE is reversible; that is,
%   INTLINE(X1,X2,Y1,Y2) produces the same results as
%   FLIPUD(INTLINE(X2,X1,Y2,Y1)).

%   Copyright 1993-2019 The MathWorks, Inc.
%   License: https://github.com/mathworks/matlab-color-tools/blob/master/license.txt

dx = abs(x2 - x1);
dy = abs(y2 - y1);

% Check for degenerate case.
if ((dx == 0) && (dy == 0))
   x = x1;
   y = y1;
  return;
end

flip = 0;
if (dx >= dy)
   if (x1 > x2)
      % Always "draw" from left to right.
      t = x1; x1 = x2; x2 = t;
      t = y1; y1 = y2; y2 = t;
      flip = 1;
   end
   m = (y2 - y1)/(x2 - x1);
   x = (x1:x2).';
   y = round(y1 + m*(x - x1));
else
   if (y1 > y2)
      % Always "draw" from bottom to top.
      t = x1; x1 = x2; x2 = t;
      t = y1; y1 = y2; y2 = t;
      flip = 1;
   end
   m = (x2 - x1)/(y2 - y1);
   y = (y1:y2).';
   x = round(x1 + m*(y - y1));
end
  
if (flip)
   x = flipud(x);
   y = flipud(y);
end
