2. ГРАФИЧЕСКИЕ ОПЕРАТОРЫ ЯЗЫКА BASIC После задания типа экрана, определения цветов и помня про то, как будет завершаться ваша программа, можно приступать к описанию графических построений. Для этого вы должны знать, что компьютер умеет по вашей корректной команде строить на экране изображения точки, линии, прямоугольника (закрашенного и незакрашенного), окружности, дуги, эллипса, а также закрашивать замкнутые области.
Во всех этих командах используются координаты, про особенности которых мы говорили в п.1.1. Координаты могут быть абсолютными и относительными. Это верно для любого графического оператора, про особенности их использования будет сказано позднее.
Когда вы ясно представите себе из каких геометрических форм должно состоять изображение и примерно рассчитаете как будут расположены они в системе координат графического экрана, тогда можно приступать к написанию программы, используя те операторы, которые мы вам и предлагаем.
2.1 Точка
Команда, позволяющая изобразить на экране точку нужного вам цвета С с координатами (х,у), записывается в виде
PSET (X,Y), С
Например: Для изображения точки серого цвета с координатами
(110, 20) нужна команда PSET(110, 20), 8
Также можно использовать команду
PSET STEP (X, Y), С
В этом случае в скобках указываются не абсолютные координаты системы координат, а смещение по оси X и Y относительно последнего изображения.
Например: screen 9
color 15, 1
pset(10, 10), 8
for x = 0 to 15
pset step (15, 15), x
next x Эта программа изобразит на экране вначале точку с абсолютными координатами (10, 10), а затем изобразит еще 16 точек различных цветов, смещая каждую относительно предыдущей по обеим осям на 15 точек.
Команда PRESET STEP (X,Y) стирает точку, то есть делает ее цветом фона, ее также можно применять как с абсолютными координатами (preset(x,y)), так и с относительными координатами (preset step (x,y)).
2.2 Линия. Прямоугольник. Закрашенный прямоугольник
Чтобы нарисовать отрезок прямой используется команда
LINE(X1,Y1)-(X2,Y2),C
Она позволяет построить на экране изображение отрезка между точками (X1,Y1) и (Х2,У2) цветом с кодом С.
Например: Команда line (10,20)-(100,96),1 нарисует синюю линию от точки (10,20) до точки (100,96).
Перед каждой парой координат можно добавить параметр STEP, тогда эти координаты будут восприняты как относительные, (см. оператор pset step). Если не указать первую пару координат, то линия начнется с места последнего изображения (см. пример к закрашиванию областей: зеленый треугольник).
Также с помощью оператора LINE можно изобразить два типа прямоугольников, указав две диагональные вершины их координатами (относительными или абсолютными)
LINE (X1,Y1) - (X2,Y2), С, В – незакрашенный прямоугольник
LINE (X1,Y1) - (X2,Y2), С, BF - закрашенный прямоугольник Например: line (10, 20)-(100, 96), 0, b - нарисует прямоугольник черного цвета с диагональными вершинами (10,20) и (100.96).
line (50, 10)-(120, 96), 4, bf - нарисует прямоугольник красного цвета с диагональными вершинами (50,10) и (120,96). 2.3 Окружность. Дуга. Эллипс
Чтобы нарисовать окружность с центром в точке (X, Y) радиусом R и цветом С используется команда
CIRCLE (X, Y), R, С
Например: Окружность с центром в точке (80, 80) радиуса 40 синего цвета можно изобразить оператором circle (80, 80), 40,1
Однако бывают случаи, когда требуется изобразить лишь часть окружности, т.е. ее дугу. Для этого также используется оператор circle, но с дополнительными параметрами, которые соответствуют началу и концу дуги в радианах.
Пояснение. Радианы - это мера углов. 1рад = 180°. На примере единичного круга вспомним как измеряются углы. Положительное направление измерения углов показано стрелкой. Напоминаем, что ~ 3.1415, помня это, вы можете вычислить любой нужный вам угол. Также можно воспользоваться функцией arctg, зная, что arctg(l) = /4. Т.е. угол в 1 рад. можно записать с помощью функции Basic : 1 = 4 * atn(l).
Конец пояснения.
Итак, дугу вы можете нарисовать с помощью команды
CIRCLE (X, Y), R, С, ,
где - начало дуги, - конец дуги.
Например: Чтобы нарисовать дугу, изображенную на картинке 1, надо воспользоваться командой circle (100, 100), 50, 8, 1.57, 3.14
Это соответствует началу дуги в / 2, а концу ее в .
На второй картинке изображен вид экрана после выполнения команды circle (150, 100), 40, 1, 4, 8*atn(l), где начало дуги лежит пониже, чем , примерно 4 радиан, а конец дуги соответствует 2*, этот угол в операторе вычислен с помощью функции arctg.
Используя эту команду с отрицательными параметрами , вы получите изображение кругового сектора:
CIRCLE (X, Y), R, С, -,-
Например: Воспользуемся предыдущим примером, изменив параметры , на отрицательные, тогда получим.
circle(100,100),50,8,-1.57,-3.14 circle(150,100),40,l,-4,-8*atn(l)
Также с помощью оператора circle можно рисовать эллипсы, или дуги эллипсов, для этого добавляется еще один параметр.
CIRCLE (X, Y), R, С, , ,
где R - радиус длинной оси.
- этот параметр отвечает за сжатие окружности или ее дуги. Если равен 1, то на экране получится правильная окружность, если < 1, то сжатие по оси Оу, если > 1, то сжатие по оси Ох.
Причем, если вы хотите изобразить полный эллипс, то параметры , р надо опустить, а запятые оставить.
Например: Изобразить эллипс, сжатый по оси Оу с отношением осей 1 к 2, можно с помощью команды circle (100,100), 50, 1, ,, 0.5
На рис.2 изображение получено с помощью команды
circle(40,20), 30. 8, 6*atn(l), 8*atn(l), 2.3
2.4 Закрашивание областей
Среди рассмотренных нами операторов сразу получить закрашенную область можно только при помощи команды line с параметром bf, но существует оператор, позволяющий закрашивать замкнутые области любой формы. Это команда
PAINT (X,Y), С, ВС
где С -цвет заливки области, ВС - цвет границы.
К параметрам этой команды предъявляются следующие требования:
точка с координатами (х,у) должна лежать внутри этой области;
цвет, определяемый кодом ВС должен совпадать с цветом границы области.
Если не соблюсти эти требования, то получится эффект «разлитой краски», т.е. краска или закрасит не то, что вам нужно, или «выльется» за границы вашей области.
Например: Надо раскрасить треугольник черного цвета в зеленый цвет.
screen 9
color 15, 7
line (100,100)-(150, 150), 0
line -(50,150),0
line -(100,100),0
paint (100,125),1,0
Рассмотрим еще один пример: снеговик (состоит из трех белых кругов разного диаметра)
screen 7
color 15, О
circle( 120,120),30,15
circle(120,70),20,15
circle(120,40),10,15
paint(120,120),15
paint( 120,70), 15
paint(120,40), 15
|