QBasic :: Функции языка (по категориям)
Работа с графикой
Правила
построения
сложных
изображений |
При рисовании придерживайтесь определенных правил,
которые перечислены далее.
Обязательно начертите свое изображение на бумаге в масштабе.
Разбейте изображение на те самые графические примитивы, каждый
из которых вы могли бы нарисовать каким-либо уже изученным оператором.
Найдите и выделите на рисунке опорные точки – концы отрезков, начала и
концы дуг, центры окружностей, эллипсов, отдельные точки (если они есть).
Наметьте точки для оператора закраски paint. Если в изображении есть
прямоугольники со сторонами, параллельными экрану, то необходимо
выделить координаты их базовых диагоналей, по которым они будут строиться.
Определите максимальный размер изображения в экранных точках,
исходя из размеров экрана.
Определите координаты всех опорных точек, значения радиусов окружностей
и эллипсов, коэффициенты сжатия эллипсов, углы всех дуг.
Определите последовательность построения и закраски замкнутых контуров.
Напишите программу, введите ее, снабжая как можно большим количеством
необходимых комментариев (можно сначала на бумаге), и отладьте ее.
Предупреждение
Запускать программу необходимо не после ее ввода целиком, а следом за первым
логически законченным фрагментом изображения, чтобы иметь возможность сразу
оценить правильность того или иного вашего программного решения.
|
Точка
|
Первый из графических примитивов – точка. Для изображения точки используется
оператор pset со следующим синтаксисом:
PSET(X, Y), С
Где х и y – координаты точки на экране, а с – ее цвет. Если цвет не указан, то точка
будет изображена последним установленным цветом (это касается и всех
прочих графических примитивов).
Рассмотрим пример.
SCREEN 9 PSET(320, 175),4
На черном экране в этом случае появится красная точка в центре.
Сразу же хочется заметить, что из эстетических соображений лучше менять цвет
фона, потому что черный экран выглядит мрачно. Например:
SCREEN 9color, 1PSET (320.175),4
|
Отрезок и
прямоуго
льник |
Следующий примитив – отрезок прямой линии. Оператор записывается
таким образом:
LINE (X1, Y1)-(X2, Y2), С
Где X1, y1 – координаты начала отрезка; х2, Y2 – координаты конца отрезка;
с – как всегда цвет.
Не секрет, что по диагонали прямоугольника можно всегда его достроить.
Известно это и Бейсику. Поэтому можно одним оператором построить
прямоугольник со сторонами, параллельными экрану. В этом случае оператор
line имеет следующий вид: LINE (XI, Y1)-(X2, Y2), С, В
То есть к обычному оператору отрезка добавляется буква (это именно буква,
а не число!) в – от английского слова box (ящик, коробка). А координаты – это
начало и конец любой из диагоналей прямоугольника.
|
Окруж-
ность |
Окружность
Следующий этап построения – окружность. Все, что нужно знать об окружности
для Бейсика – это координаты ее центра и радиус. Оператор выглядит так:
CIRCLE (X, Y), R, С
Где х, y – координаты центра, r – радиус (в экранных точках), с – цвет.
Например, оператор:
CIRCLE (320, 175), 50, 2
Изобразит нам зеленую окружность радиусом 50 точек в центре экрана.
|
Эллипс |
Эллипс
Эллипс – это окружность, которой слегка дали по "голове" или по "бокам",
в результате чего она стала вытянутой по вертикали или горизонтали.
И вместо одного радиуса, как у окружности, у эллипса стало два – по осям X и Y.
Частное от деления Ry на Rx дает нам так называемый коэффициент сжатия:
K = Ry/Rx
Оператор рисования эллипса записывается почти так же, как и для окружности:
CIRCLE (X, Y), R, С,,, К
Где х, y – координаты центра эллипса, r – радиус той окружности, из которой
этот эллипс получился, с – цвет, к – значение коэффициента сжатия.
Например, после выполнения оператора:
CIRCLE (320, 175), 50, 2,,,.5
В центре экрана появится эллипс зеленого цвета, сжатый сверху и снизу,
у которого Ry в два раза меньше, чем Rx.
|
Дуга |
Дуга
CIRCLE (X, Y), R, С, а, b
Где появившиеся две новые величины а и ь и обозначают эти углы.
Правило рисования дуг на Бейсике звучит так: "дуга строится от угла а
к углу b против часовой стрелки".
если вы знаете угол начала дуги – 30°, но затрудняетесь определить его
на тригонометрической окружности, то можете в соответствующем месте
оператора дуги написать:
3.14*30/180
CIRCLE (500, 70), 50, 14, 4.71, 1.57 CIRCLE (215, 85), 50*3/4, 4.71, 1.57, 2Rem дуга окружности Rem дуга эллипса
|
Закраска |
Закраска
Итак, оператор закраски имеет следующий синтаксис:
PAINT (X, Y), C1, C2
Где х, y – координаты любой точки внутри закрашиваемого контура,
C1 – цвет, которым закрашивается контур, С2 – цвет самого контура.
Если эти цвета совпадают, то достаточно указать С1.
Правила закраски:
Контур должен быть замкнут. Если в нем будет прокол хотя бы в одну
экранную точку, то вся "краска" вытечет и зальет экран.
Контур должен быть одноцветен. Если составляющие даже замкнутого
контура разных цветов, то для компьютера эта ситуация аналогична
разрыву. Будет закрашен весь экран.
Координаты точки закраски должны лежать внутри контура.
Рекомендуется закрашивать контур непосредственно после того, как
он нарисован. Часто рисуют все изображение, потом начинают
закрашивать разные области, а линии разного цвета пересекаясь дают
разрывы, и вот уже экран затекает самыми разными красками.
Если точка закраски попала вне контура, то закрасится весь экран,
за исключением самого контура (иногда это бывает нужно, но подобные
случаи редки).
Если точка закраски попала на контур, то ничего не закрасится |
Рисование непрерывной линии |
Для приведения в действие последовательности команд языка GML
необходимо использование оператора draw.
Например, команда:
I DRAW "R50 D50 L50 U50"
Изобразит нам квадрат, начиная от последней графической точки.
Если такой точки не было, и вы сразу начинаете строить изображение с помощью
оператора draw, то по умолчанию исходной точкой считается центр экрана.
Если вы подготовите сначала какое-либо изображение в строковой переменной,
то потом его можно будет многократно вызывать на экран. Для этого используется функция "х".
Ее работу рассмотрим на примере.
N$="R50 D50 L50 U50"
DRAW "C14 X"+VARPTR$ (N$)
DRAW "BM500, 50 C2 X"+VARPTR$(N$)
С помощью первого оператора запоминаем последовательность команд построения квадрата в строковой переменной n$. Вторым оператором задаем цвет 14 и сообщаем компьютеру командой х, что необходимо выполнить последовательность команд n$. Это делает функция varptr$. Последним оператором перемещаемся без рисования в точку с координатами 500, 50, меняем цвет на 2 и снова выполняем последовательность команд n$.
В результате на экране в центре и в правом верхнем углу должны появиться одинаковые разноцветные квадраты со стороной 50.
Совместное использование графических примитивов и оператора draw позволит вам рисовать очень качественные изображения на вашем экране.
|
Вывод текстовой информации в графике
|
Вывод текстовой информации в графике
Часто хочется сопроводить свои рисунки подписями. Не сдерживайте свои желания.
Делайте это с помощью операторов locate и print.
Предупреждение
Только надо помнить, что координаты в операторе locate не графические (640x350), а текстовые (80x25).
Оператор LOCATE a, b - указывает позицию экрана (a-строка, b-столбец), начиная с которой будет печататься текст или число. Обычно используется перед оператором PRINT.
Пример:
LOCATE 4, 10: PRINT "Здравствуй, мир!" |
|
|