这是NumPy的一个简单实现,只需计算直线方程:import numpy as np
def draw_line(mat, x0, y0, x1, y1, inplace=False):
if not (0 <= x0 < mat.shape[0] and 0 <= x1 < mat.shape[0] and
0 <= y0 < mat.shape[1] and 0 <= y1 < mat.shape[1]):
raise ValueError('Invalid coordinates.')
if not inplace:
mat = mat.copy()
if (x0, y0) == (x1, y1):
mat[x0, y0] = 2
return mat if not inplace else None
# Swap axes if Y slope is smaller than X slope
transpose = abs(x1 - x0) < abs(y1 - y0)
if transpose:
mat = mat.T
x0, y0, x1, y1 = y0, x0, y1, x1
# Swap line direction to go left-to-right if necessary
if x0 > x1:
x0, y0, x1, y1 = x1, y1, x0, y0
# Write line ends
mat[x0, y0] = 2
mat[x1, y1] = 2
# Compute intermediate coordinates using line equation
x = np.arange(x0 + 1, x1)
y = np.round(((y1 - y0) / (x1 - x0)) * (x - x0) + y0).astype(x.dtype)
# Write intermediate coordinates
mat[x, y] = 1
if not inplace:
return mat if not transpose else mat.T
一些测试:
^{pr2}$