Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
15.02.2016
Размер:
4.77 Mб
Скачать

К лабораторной работе № 7

Цель работы: приобретение практических навыков в разработке и отладке программ для работы со статической графикой.

Структура создаваемой программы: установка экранного режима; выполнение рисунка.

Установка экранного режима осуществляется операторами SCREEN и COLOR. В данной работе используется SCREEN 9.

Изображение разбивается на фрагменты, рисуемые с помощью графических примитивов: точек (операторы PSET, PRESET), линий, прямоугольников и закрашенных прямоугольников (оператор LINE), окружностей, эллипсов и дуг окружностей и эллипсов (оператор CIRCLE). Примеры этих операторов приведены в таблице 0.7.1 и 0.6.1. Более сложные контуры рисуются с использованием оператора DRAW – таблица 0.7.2. Рекомендуется нарисованные контуры сразу же закрашивать (оператор PAINT), соблюдая следующие правила:

  • Контур должен быть замкнут, в нем не должно быть прокола хотя бы на одну экранную точку.

  • Контур должен быть одноцветен, разноцветность составляющих замкнутого контура для Бейсика равноценна разрыву.

  • Координаты точки начала закраски должны лежать внутри контура.

Если точка закраски попала вне контура, то закрасится весь экран за исключением самого контура. Если точка закраски попала

на контур или на точку с цветом контура, то ничего не закрасится.

Для проверки попадания точки начала за-

краски внутрь контура рекомендуется использовать оператор PSET, рисующий точку ярким контрастным цветом, после чего заменить его PAINT с теми же координатами.

Используя тригонометрическую окружность, представленную на рисунке, удобно определять начало и конец дуг, рисуемых оператором CIRCLE. Следует заметить, что радиус от 0 нарисовать невозможно, с этой целью используется малая величина, например, 0.01. Так, например, как видно из рисунка, верхнюю полуокружность с радиусами (диаметром) нарисует:

CIRCLE (x, y), R, cvet, -0.01, -3.14

А нижнюю полуокружность без радиусов:

CIRCLE (x, y), R, cvet, 3.14 (поскольку параметр, определяющий конец дуги опущен, то по умолчанию дуга рисуется до 6.28, т.е. до конца).

Перед созданием программы начертите рисуемое изображение в масштабе на бумаге в клетку. Тогда, используя выводимую на экран координатную сетку, нетрудно это изображение запрограммировать. Дополнительно к сетке неплохо использовать PRINT "x = "; POINT(0); "y = "; POINT(1), выводящий на экран координаты последней точки.

Необходимо определить координаты начальной (опорной) точки, привязав к ней фрагменты изображения, используя относительные координаты (графические операторы с параметром STEP, либо выражения для координат типа. x = x +dx и y = y + dy). Тогда можно передвигать рисунок по экрану без изменения программы, меняя лишь координаты опорной точки.

Определите последовательность построения и закраски замкнутых контуров, нередко она имеет большое значение. Рисуйте контрастным хорошо различимым на фоне цветом, его всегда потом можно изменить. Контролируйте свои шаги при создании программы, постоянно запуская ее после введения новой команды оператораDRAW или написания очередных операторов LINE, CIRCLE и пр. Если шаг был удачным, сохраните его, чтобы иметь в запасе, на всякий случай, выход без сохранения. Старайтесь, чтобы текст программы не выходил за боковые границы экрана. Например, оператор DRAW всегда можно непосредственно продолжить новым DRAW на новой строке.

Проиллюстрируем построение изображения на примере рисунка трамвая.

'tramvay.bas Трамвай

10 CLS 'Очистка экрана

20 SCREEN 9 'Установка экранного режима

30 COLOR , 2 'Установка экранных цветов

'==1=== Блок рисования вагона =========================

40 DRAW "bm402,160 c11 l154 g8 d22 r170 u22 h8 bm+0,+2 p12,11"

50 DRAW "bm-32,-10 ta45 c1 u15 l15 d15 r15" 'Токоприемник

'==2=== Блок рисования окон и колес трамвая =============

60 y = POINT(1) + 16 'Установки цикла для окон от последней точки

70 xn = POINT(0) – 130: xk = xn + 170: p = 25

80 FOR x = xn TO xk STEP p 'Цикл для рисования окон и колес

90 IF a = 0 THEN LINE (x, y)-(x + 20, y + 14), 11, BF 'Окна трамвая

100 IF a => 1 THEN CIRCLE (x, y), 7, 8, -3.14, -6.28

110 PAINT (x, y + 2), 8

120 NEXT x

'==3=== Блок переустановки цикла для колес ===============

130 a = a + 1: p = 14 'a = 1 – задние колеса, a = 2 – передние

140 IF a = 1 THEN xn = xn + 22: xk = xn + 28: y = y + 22: goto 80

150 IF a = 2 THEN xn = xn + 98: xk = xn + 28: goto 80

160 END

За начальную (опорную) точку выбрана правая верхняя точка корпуса вагона с координатами x = 402, y = 160, задаваемая командой bm402,160 оператора DRAW в строке 40. Координаты в других командах и операторах задаются относительно этой точки. Причем, в строках 60 и 70 относительные координаты задаются с помощью операторов POINT(1) и POINT(0), выводящих координаты y и x, соответственно, последней (текущей) точки.

Таблица 0.7.1.

Оператор и его описание

CIRCLE (200, 100), 50, 1

Графический оператор, рисующий окружность с центром x = 200, y = 100, радиусом r = 50, цветом 1 (синий).

CIRCLE STEP(100, 100), 20, 2

Графический оператор, рисующий окружность со смещением центра относительно текущей позиции курсора, т.е. (пусть последняя точка x = 100, y = 0) с центром x = 200, y = 100, радиусом r = 20, цветом 2 (зеленый).

CIRCLE (200, 100), 40, 3, 1.57, 4.71

Графический оператор, рисующий дугу окружности с центром x = 200, y = 100, радиусом r = 40, цветом 3 (голубой). 1.57 задает начало дуги, 4.71 – конец.

CIRCLE (200, 100), 40, 4, -1.57, -4.71

Графический оператор, рисующий дугу окружности с центром x = 200, y = 100 и радиусы от концов дуги; радиусом r = 40, цветом 4 (красный). -1.57 задает начало дуги и рисование радиуса, -4.71 – конец дуги и рисование радиуса.

CIRCLE (200, 100), 40, 5, 1.57

Графический оператор, рисующий дугу окружности с центром x = 200, y = 100, радиусом r = 40, цветом 5 (фиолетовый). 1.57 задает начало дуги, 6.28 – конец (поскольку параметр опущен).

CIRCLE (100, 200), 30, 3, , 4.71

Графический оператор, рисующий дугу окружности с центром x = 100, y = 200, радиусом r = 30, цветом 6 (коричневый). 0 задает начало дуги (т.к. параметр опущен), 4.71 – конец.

CIRCLE (200, 100), 50, 7, , , 0.3

Графический оператор, рисующий эллипс с центром x = 200, y = 100, радиусом r = 50, цветом 7 (серый) и сжатием по оси y (т.к. параметр < 1).

CIRCLE (200, 100), 50, 7, , , 3

Графический оператор, рисующий эллипс с центром x = 200, y = 100, радиусом r = 50, цветом 7 (серый) и сжатием по оси x (т.к. параметр > 1).

PAINT (200, 100), 9, 8

Графический оператор, закрашивающий цветом 9 (светло-синий) замкнутый контур, ограниченный линией цвета 8 (темно-серый), начиная с точки с координатами x = 200, y = 100.

PAINT STEP(200, 100), 2, 1

Графический оператор, закрашивающий цветом 2 (зеленый) замкнутый контур, ограниченный линией цвета 1 (синий), начиная с точки (пусть последняя точка

x = 100, y = 100) с координатами x = 300, y = 200.

Примечание:

1. Последняя точка после завершения CIRCLE – центр окружности

2. Если в операторе CIRCLE не указан номер цвета, то он рисует основным, а если указан 0 – то фоновым цветом.

3. Дуги эллипсов рисуются аналогично дугам окружности.

4. Координаты и параметры в операторе LINE могут задаваться числами, переменными (x1), элементами массива (y(i,j)), выражением (например, (i + 2) / 3).

Таблица 0.7.2.

О

DRAW – графический оператор, интерпретирующий символьное выражение и рисующий графический объект

ператорDRAW

Коман-да

Описание

U10

Вверх на 10

D7

Вниз на 7

L15

Влево на 15

R22

Вправо на 22

E11

Вправо вверх на 11

F5

Вправо вниз на 5

G7

Влево вниз на 7

H6

Влево вверх на 6

M20,30

Линия от последней точки до точки с координатами x =20, y = 30

M+5,-10

Линия от последней точки (пусть x = 20, y = 20) до точки с координатами x = 25, y = 10 (шаг)

BM10,8

П

Основные команды перемещения нетрудно запомнить с помощью этого рисунка.

Для многократного вызова на экран изображения существует подкоманда

"x" + VARPTR$(n$ )

Пример:

n$ = "c14 u40 l40 d40 r40"

DRAW "x" + VARPTR$(n$ )

DRAW "bm5,5 x" + VARPTR$(n$)

Выведет на экран два прямоуголь-

ника в середине экрана и в левом

верхнем углу.

ереход, не рисуя, в точку с координатамиx = 10, y = 8

C2

Установка цвета 2 (зеленый)

P1,2

Закрашивание замкнутой фигуры, где 1 (синий) – цвет фигуры, 2 (зеленый) – цвет границы

S7

Установка масштаба 7 (параметр масштаба 1  и  255). Увеличивает единицы перемещения команд U, D, L, R, M

A2

Установка угла поворота 2 (на 1800). 0 – на 00, 1 – на 900, 3 – 2700.

TA30

Поворачивает изображение на угол в 300 (угол поворота в пределах от –3600 до 3600). Если угол > 0, то поворот против часовой стрелки, иначе – по часовой стре-лке.

NR8

Рисует вправо на 8 и возвращается назад в исходную точку (буква N).

Примечание:

1. Перед командой Pn,n необходимо перейти без рисования внутрь закрашиваемой фигуры.

2. Цвет по ходу рисования можно неоднократно переустанавливать командой Cn.

3. Замкнутый контур не будет замкнутым для Pn,n, если линия границы контура содержит хотя бы одну точку другого цвета.