def METHOD_NAME(p0, p1, width=1):
    """ Return a list of points that form a line between the two given points
    p0 (int, int): x, y of the first point on the line
    p1 (int, int): x, y of the last point on the line
    return (list of (int, int)): all the points on the line segment, including p0,
     and p1.
    """
    x0, y0 = p0
    x1, y1 = p1
    points = []
    if width == 1:
        dx = abs(x1 - x0)
        dy = abs(y1 - y0)
        sx = x0 < x1 and 1 or -1
        sy = y0 < y1 and 1 or -1
        err = dx - dy
        x, y = x0, y0
        while True:
            points.append((x, y))
            if x == x1 and y == y1:
                break
            e2 = err * 2
            if e2 > -dy:
                err -= dy
                x += sx
            if e2 < dx:
                err += dx
                y += sy
    elif width > 1:
        # Vector
        vx = x1 - x0
        vy = y1 - y0
        if vx or vy:
            # Perpendicular vector
            px = vy
            py = -vx
            # Normalize
            plen = math.sqrt(px * px + py * py)
            nx = px / plen
            ny = py / plen
            # Corners
            r1 = (int(round(x0 - nx * width / 2)), int(round(y0 - ny * width / 2)))
            r2 = (int(round(x0 + nx * width / 2)), int(round(y0 + ny * width / 2)))
            r3 = (int(round(x1 + nx * width / 2)), int(round(y1 + ny * width / 2)))
            r4 = (int(round(x1 - nx * width / 2)), int(round(y1 - ny * width / 2)))
            points = rasterize_rectangle((r1, r2, r3, r4))
    else:
        raise ValueError("Illegal line width!")
    return points