public static Point[] GetLinePoints(Point first, Point second)
{
Point[] coords = null;
int x1 = first.X;
int y1 = first.Y;
int x2 = second.X;
int y2 = second.Y;
int dx = x2 - x1;
int dy = y2 - y1;
int dxabs = Math.Abs(dx);
int dyabs = Math.Abs(dy);
int px = x1;
int py = y1;
int sdx = Math.Sign(dx);
int sdy = Math.Sign(dy);
int x = 0;
int y = 0;
if (dxabs > dyabs)
{
coords = new Point[dxabs + 1];
for (int i = 0; i <= dxabs; i++)
{
y += dyabs;
if (y >= dxabs)
{
y -= dxabs;
py += sdy;
}
coords[i] = new Point(px, py);
px += sdx;
}
}
else
// had to add in this cludge for slopes of 1 ... wasn't drawing half the line
if (dxabs == dyabs)
{
coords = new Point[dxabs + 1];
for (int i = 0; i <= dxabs; i++)
{
coords[i] = new Point(px, py);
px += sdx;
py += sdy;
}
}
else
{
coords = new Point[dyabs + 1];
for (int i = 0; i <= dyabs; i++)
{
x += dxabs;
if (x >= dyabs)
{
x -= dyabs;
px += sdx;
}
coords[i] = new Point(px, py);
py += sdy;
}
}
return coords;
}