Работа с монитором в графическом режиме

   В графическом режиме минимальным элементом, который можно вывести на экран, является не символ, а пиксель. Пиксель (точка экрана) представляет собой крошечный прямоугольник, размеры которого зависят от установленного графического режима. Верхняя левая точка экрана имеет координату (0,0), ось ОХ направлена вправо, ось ОY – вниз, т.е. чем ниже на экране расположена точка, тем больше ее координата по оси OY..

   Оператор SCREEN номер режима переводит режим работы экрана из текстового в графический с заданным номером. Если оператор SCREEN не указан, то подразумевается текстовый режим. Текстовый режим имеет номер 0, поэтому, если нужно из графического режима перейти в текстовый, следует использовать SCREEN 0. Иногда при возврате из графического режима (например, из SCREEN 7) символы текста становятся широкими. Вернуть им нормальные размеры можно только оператором WIDTH 80.Графические режимы различаются разрешением (количеством “точек”) экрана и количеством возможных цветов.

   Например, SCREEN 7 устанавливает разрешение экрана в 320 точек по горизонтали и 200 точек по вертикали. Положение произвольной точки на экране задается двумя числами (x, y) в экранной системе координат. От декартовых координат эта система отличается тем, что ось Oy направлена вниз, а не вверх.

В графическом режиме на экран кроме символов можно выводить и геометрические фигуры: точки, линии, прямоугольники, окружности и т.д. Замкнутые фигуры можно закрашивать.

Рисование точек и линий

   Оператор PSET (x, y)[, цвет] закрашивает точку экрана заданным цветом.

   Оператор LINE (x1, y1)-(x2, y2)[, цвет] рисует отрезок, соединяющий на экране точки с координатами (x1, y1) и (x2, y2)

   Оператор LINE - (x2, y2)[, цвет] рисует отрезок, соединяющий последнюю выведенную на экран точку с точкой (x2, y2).

Цвет в этих операторах задается числом от 0 до 15. Если цвет в графических операторах не указан, то все линии рисуются белым цветом. (О том, какие могут быть цвета в различных графических режимах, мы поговорим позже.)

   Пример. Соединить точки (20, 45) и (38, 144).

 

Первый способ:

LINE (20, 45)-(38, 144)

 

Второй способ:

PSET (20, 45)

 

 

LINE -(38, 144)

   Задание. Построить на экране треугольник, четырехугольник, пятиугольник; нарисовать домик. Записать программу “Домик” в файл HOUSE.BAS.

 

Прямоугольники и квадраты

   Рисовать домик отдельными линиями - не самый рациональный способ. Легко увидеть, что домик представляет собой прямоугольник с крышей из двух отрезков. (Так рисуют домик почти все, кроме гениальных фантазеров и профессиональных художников.) А нарисовать прямоугольник можно одним оператором

LINE (x1, y1)-(x2, y2), [цвет], B

   Этот оператор рисует рамку-прямоугольник со сторонами, параллельными границам экрана. Точки (x1, y1) и (x2, y2) суть две вершины прямоугольника, расположенные по одной из его диагоналей. Если параметр цвет отсутствует, то будет нарисована белая рамка. (Но “лишняя” запятая должна остаться!)

   Поскольку точки экрана представляют собой маленькие прямоугольнички, то попытка нарисовать квадрат оператором

LINE (20, 20)-(120, 120), , B

потерпит неудачу. Высота этого “квадрата” окажется больше, чем ширина, хотя обе стороны содержат одинаковое число пикселей. Уменьшим число точек в высоте “квадрата” в 1.2 раза (для SCREEN 1!) или во столько же раз увеличим ширину “квадрата” - только тогда мы получим истинный квадрат. Поправочный коэффициент назовем “коэффициентом вытянутости” пикселя.

   Оператор LINE (x1, y1)-(x2, y2), [цвет], BF рисует такой же, но закрашенный прямоугольник.

   Задача. Нарисовать на экране пирамиду из 10 ступенек-прямоугольников.

   Решение. Воспользуемся тем, что пирамида имеет осевую симметрию. Расположим ось пирамиды посредине экрана. Пронумеруем прямоугольники сверху вниз числами от 1 до 10. Очевидно, что значения x1, y1, x2, y2 зависят от номера прямоугольника. В силу симметрии, чтобы получить x1, нужно от 160 вычесть что-то, а чтобы получить x2 - прибавить столько же.

   Составим вспомогательную табличку.

Номер
ступеньки


x1


x2

1

160 - 10

160 + 10

2

160 - 20

160 + 20

3

160 - 30

160 + 30

...

...

...

10

160 - 100

160 + 100

   Легко заметить, что номер ступеньки-прямоугольника и величина добавки связаны зависимостью

добавка = 10*номер.

   Если обозначить через k номер ступеньки, получим формулы для вычисления x1 и x2:

x1 = 160 - 10*k

x2 = 160 + 10*k

   Значения y1 и y2 также зависят от номера и высоты ступеньки h, где h - некоторая заранее заданная величина (например, h = 10):

y1 = 40 + h*k

y2 = y1 + h

   Теперь можно составить программу.

 
SCREEN 7
h = 10
FOR k = 1 TO 10
   x1 = 160 - 10*k
   x2 = 160 + 10*k
   y1 = 40 + h*k
   y2 = y1 + h
   LINE (x1, y1)-( x2, y2), , B
NEXT k

   Задание. Запишите программу под именем PIRAMIDA.BAS. Измените высоту, ширину, цвет ступенек. Составьте пирамиду из закрашенных прямоугольников; из закрашенных прямоугольников с рамкой другого цвета.

   Заметим, что использование переменной h для обозначения высоты ступенек позволяет проще изменять высоту ступеньки.

Окружности и дуги

   Оператор CIRCLE (x, y), радиус[, цвет] рисует окружность заданного радиуса и цвета с центром в точке (x, y). Если вся окружность на экране не поместится, то будет нарисована только ее часть. Радиус окружности задается в пикселях, но такое количество пикселей укладывается только по горизонтали. Размер вертикального радиуса (в пикселях) зависит от номера графического режима.

   Задача. Нарисовать несколько концентрических окружностей (“мишень”).

Решение.

 
SCREEN 7
FOR r = 5 TO 65 STEP 5
   CIRCLE (160, 100), r, 3
NEXT r

   Задание. Запишите программу под именем MISHEN.BAS. Сделайте шаг в цикле равным 3, 2, затем 1 (но не 0, так как программа “зациклится”!). Объясните возникающий при этом эффект. Измените положение “мишени” на экране так, чтобы ее часть ушла за экран. Введите зависимость положения центра окружности от ее радиуса. Поэкспериментируйте с несколькими разноцветными “мишенями”.

   Тем же оператором можно нарисовать и дугу, только дополнительно потребуется задать значения начального и конечного углов дуги:

CIRCLE (x, y), радиус, [цвет], нач_угол, кон_угол

   Если поместить в точку (x, y) начало математической системы координат, то начальный и конечный углы откладываются от оси Ox в направлении против часовой стрелки.

   Начальный угол может быть больше конечного, но принцип рисования дуги останется прежним.

   Углы дуги должны задаваться в радианах. Поскольку это не всегда удобно, автор рекомендует переводить градусы в радианы каждый раз, как это потребуется. Коэффициент пропорциональности QR вычисляется по формуле QR = p/180, где p » 3.14159265358 всем известная константа. Конечно, можно использовать и конкретное значение коэффициента: QR » 0.0174329252.

   Пример. Изобразите на листе бумаги, что получится на экране после выполнения программы:

 
SCREEN 7
QR = 0.0174329252
CIRCLE (100, 50), 60, 2, 270*QR, 0
CIRCLE (220, 50), 60, 2, 180*QR, 270*QR
CIRCLE (100, 150), 60, 2, 0, 90*QR
CIRCLE (220, 150), 60, 2, 90*QR, 180*QR

   Правильность ответа проверьте на компьютере.

   Замечание. Математики рассматривают как положительные, так и отрицательные углы. В операторе CIRCLE также могут использоваться отрицательные значения для начального и конечного углов, однако здесь знак минус “сообщает”, что следует не только нарисовать дугу, но и провести один или оба радиуса. Измените предыдущую программу, посмотрите, что получится на экране. Учтите, что с точки зрения Quick Basic’а “отрицательный” нуль ничем не отличается от обычного, поэтому замените его очень маленьким отрицательным числом, например, - 0.001.

 

   Задания для самостоятельной работы

Составьте программы, которые выводят на экран следующие картинки:

 

Графические режимы

   SCREEN 1 - это устаревший графический режим, используемый в Quick Basic только для совместимости с некоторыми мониторами. В этом режиме доступны одновременно только 4 цвета (включая цвет фона). Одному и тому же номеру соответствуют разные цвета в зависимости от выбранной палитры:

Номер цвета

Палитра №1

Палитра №2

1

голубой (3)

зеленый (2)

2

фиолетовый (5)

красный (4)

3

белый (7)

коричневый (6)

   Оператор COLOR в этом режиме имеет свой особый синтаксис:

COLOR цвет_фона, номер_палитры

   Выбор цвета фона намного богаче - он может быть любым из 16 основных цветов (от 0 до 15).

   По умолчанию SCREEN 1 устанавливает первую палитру.

   SCREEN 2 задает разрешение 640 точек по горизонтали на 200 точек по вертикали. В этом графическом режиме возможны только два цвета - черный и белый, заданные “раз и навсегда”. Использование оператора COLOR в этом режиме некорректно и вызовет сообщение об ошибке “Illegal function call” (“Недопустимый вызов функции”).

   Высота пикселя в этом режиме больше его ширины в 2.4 раза.

SCREEN 7 задает разрешение 320 точек по горизонтали на 200 точек по вертикали, следовательно, “коэффициент вытянутости” пикселя, как и в SCREEN 1 равен 1.2..

   В этом и следующих режимах оператор COLOR управляет цветом линий, цветом фона экрана и цветом символов текста. Можно указывать цвет рисования и в каждом графическом операторе (если цвет пропущен, то линия рисуется цветом, заданным в операторе COLOR, а если нет и оператора - то ярко-белым цветом). Оператор COLOR имеет следующий вид:

COLOR цвет_линии, цвет_фона

   Цвет линии - число от 0 до 15, цвет фона - число от 0 до 7. Заданные параметры распространяются и на текстовый вывод, но в отличие от текстового режима нельзя вывести на экран мигающие символы. Кроме того, изменение цвета фона действует и на уже выведенный текст!

   SCREEN 8 задает разрешение 640 точек по горизонтали на 200 точек по вертикали (“коэффициент вытянутости” = 2.4), а SCREEN 9 - 640 точек по горизонтали на 350 точек по вертикали. Точное значение “коэффициента вытянутости“ в SCREEN 9 равно 48/35. что практически равно 1.37.

   Для мониторов типа VGA и SVGA возможны и другие графические режимы. Чаще всего используются режим SCREEN 12 с разрешением 640 точек по горизонтали на 480 точек по вертикали, в котором “коэффициент вытянутости” в точности равен 1. Однако в этом режиме в операторе COLOR указывается только один параметр - цвет линии (символа). Цвет фона оператором не задается!

   Задание. Загрузите программу PIRAMIDA.BAS и посмотрите результат выполнения в рассмотренных графических режимах. Сделайте ступеньки пирамиды разных цветов. Подпишите рисунок (используйте оператор COLOR для задания цвета фона и символов текста).

 

Закраска произвольной области

   Если на экране нарисована замкнутая кривая, то область внутри нее можно закрасить. Также можно закрасить и область, оставшуюся снаружи от кривой. Для этого используется оператор

   PAINT (x, y), цвет_закраски, цвет_границы

   Точка (x, y) должна попасть внутрь области, подлежащей закрашиванию.

   Если граница области “дырявая”, то краска выльется за пределы области, даже если дырка всего в один пиксель. То же самое произойдет, если граница области содержит по недосмотру кусочек другого цвета - для оператора PAINT это все равно что дырка.

   Пример. Нарисовать флаг Японии - красный круг на белом фоне.

 

 
‘--------- Флаг Японии ---------
SCREEN 7
LINE (10, 10)-(100, 50), 15, BF
CIRCLE (55, 30), 20, 12
PAINT (55, 30), 12, 12

   Задание. Нарисовать флаги предложенных ниже стран или любой другой страны.

   Чтобы упростить построение сложного контура, можно составить его из нескольких простых. Например, крест на флаге Швеции сделать из двух закрашенных прямоугольников, серп на флаге Турции - из двух кругов, один из которых закрасить белым, а другой, меньший, красным.

   При закраске окружности в качестве начальной точки для оператора PAINT удобно брать центр окружности, в других случаях, особенно при закраске маленьких областей, легко “промахнуться” мимо области. Чтобы проконтролировать расположение начальной точки, заменим оператор PAINT оператором PSET(x, y). Убедимся в том, что точка (x, y) попала в нужное место, и после этого вернем оператор PAINT на свое законное место.

 

Сайт создан в системе uCoz