READ ksi! READ efca! READ dzt! GOSUB prjct NEXT i
Затем в графическом режиме осуществляется построение изображений прямых, соединяющих эти точки.
SCREEN 12
LOCATE 16, 37: COLOR 7
PRINT "АНАГЛИФ"
у2 = ус (12) : r2 = xr(12) : 12 = xl(12)
FOR iv = 1 ТО 12
GOSUB getpoint
GOSUB drawl NEXT iv SLEEP END
He забудьте записать в этом месте вышеприведенную программу пересчета координат!
Следующая подпрограмма читает новые значения координат конечной точки, но перед этим передает значения старой конечной точки в начальную.
getpoint:
у1 = у2: г1 = r2: 11 = 12
у2 = yc(iv) : r2 = xr(iv) : 12 = xl(iv) RETURN
Нижеследующая подпрограмма осуществляет построение отрезков, продвигаясь точка за точкой вдоль растра экрана. Она основана на известном алгоритме Брезенхама в том или ином виде используемого для наиболее быстрого построения прямых. Его быстродействие обусловлено тем, что в нем не используются числа с плавающей запятой. В алгоритме Брезенхама производится расчет погрешности аппроксимации (приблизительной замены) фактического значения текущей точки целочисленным значением, а по превышению этой погрешностью значения 0,5 соответствующая координата изменяется на 1 с целью уменьшения модуля погрешности. Для работы с целыми числами в вычислениях погрешности введен масштабный множитель равный максимальному изменению координаты.
drawl:
уу = у2 - yl: yn = ABS(yy) : yd = SGN(yy)
'модуль и знак изменения ординаты
FOR j = 1 ТО 2 'цикл построения двух отрезков IP j=l THEN ' выбор абсцисс и цвета отрезков
xl = 11: х2 = 12: my = 1: уш = 4 ELSE
xl = rl: x2 = r2: my = 4: уш = 1 END IF xx = x2 - xl: xn = ABS(xx): xd = SGN(xx)
'модуль и знак изм. абсциссы х = xl: у == yl 'начальная точка шах = xn: IF yn > max THEN шах = yn
'выбор абсциссы