Графические устройства



Пример 3 11 Подпрограмма для рисования гладких линий



Пример 3.11. Подпрограмма для рисования гладких линий

anyline: mov es: [di] , al запись кода точки в видеобуфер
add di, bx коррекция текущего адреса
jnc @F -> адрес в пределах окна
call NxtWin установка следующего окна
@@: loop anyline управление повторами цикла
ret возврат из подпрограммы

При рисовании гладких линий использовать операцию stosb для записи кодов точек в видеопамять нецелесообразно.

Давайте разберемся, что именно можно нарисовать с помощью подпрограммы, 3.11. Обозначим константу переадресации, значение которой записывался в Регистр bх' буквой и и условимся, что она может быть только по-жптельным числом Вспомните табл. 3.3 — положительные приращения адресов смежных точек могут иметь четыре значения: i, Horsize, Horsize+i HorSize-i. Если в качестве константы k использовать эти значения, то соответственно будут нарисованы горизонтальная, вертикальная и две наклонные прямые. Последние являются диагоналями квадрата, сторона которого содержит количество точек, указанное в регистре сх.

Подпрограмма 3.11 позволяет рисовать пунктирные линии. Например, если
задавать k=2, k=2*Horsize, k=2*(Horsize+1) И k=2*(Horsize-1), TO будут нари-
сованы пунктирные линии, у которых расстояние между соседними точками равно 2. Однако такая возможность является побочным эффектом и не представляет особого интереса.

Если вам часто приходится рисовать вертикальные линии, то сделайте копию примера 3.11, замените в ней команду add di, bx на add di, Horsize и подберите подходящее имя подпрограммы (не забудьте указать его в команде loop).









Содержание  Назад  Вперед