Быстрый и грязный способ нарисовать прямые в матрице вне экрана - вычислить формулу a*X+b*Y=c
.
Пусть h и w будут шириной и высотой вашего буфера:
X = repmat([0:w-1], h, 1)
Y = repmat([0:h-1]', 1, w)
Для каждой пары точек (x1, y1) -> (x2, y2) a, b и c равны:
a = y2-y1
b = x1-x2
c = x1*y2-x2*y1
Теперь вычисляем прямолинейность:
st = a*X+b*Y-c
st(abs(st)>1) = 1
st = 1 - abs(st)
Matrix st
- это матрица w * h, содержащая сглаженную прямую, проходящую через точки (x1, y1) и (x2, y2). Теперь перейдем прямо к линии, маскируя ненужные части:
[xs] = sort([x1 x2])
st = st .* [zeros(h, xs(1)) ones(h, xs(2)-xs(1)) zeros(h, w-xs(2))]
[ys] = sort([y1 y2])
st = st .* [zeros(ys(1), w) ; ones(ys(2)-ys(1), w) ; zeros(h-ys(2), w)]
Мы только что нарисовали одну линию вручную без какого-либо явного зацикливания. Однако нет никаких гарантий эффективности кода: -)
Наконец: добавьте еще одно измерение к каждой формуле выше (оставлено в качестве упражнения для читателя).