Для чего предназначен оператор paint
Перейти к содержимому

Для чего предназначен оператор paint

  • автор:

Оператор paint

С помощью оператора PAINT можно закрасить замкнутую область в заданный цвет.

PAINT (X,Y) , C1 , C2

X,Y – координаты любой точки из замкнутой области.

С1 – цвет, в который надо закрасить область.

С2 – цвет, которым нарисована граница области.

Если цвет области совпадает с цветом границы, то С2 можно не указывать. Закрашиваемая область должна быть замкнутой. Если в контуре (на границе) области окажется разрыв, краска С1 “вытечет” из контура и заполнит весь экран.

Нарисовать натюрморт из фруктов и овошей;

Нарисовать снежную бабу;

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

Вывод текста в графическом режиме

В графическом режиме можно выводить текст командой PRINT. Каждый видеорежим имеет собственное деление экрана на строки и столбцы. Например, в режиме 9 экран делится на 25 строк и 80 столбцов (как бы имитация текстового режима). Матрица символа имеет размеры 8х14 – восемь столбцов и 14 строк (640/80 и 350/25). Координаты выводимого текста можно указать с помощью обычной команды LOCATE, например:

На экране будет: А = 48

Текст выводится текущим цветом символов, который указан в последней выданной команде COLOR.

Графическое “перо”draw

Оператор DRAW позволяет управлять движением “пера” с помощью графических команд.

DRAW строка символов

В строке символов записывается последовательность графических команд, причем каждая команда обозначена латинской буквой и целым числом (например, Е10, С2 и т.д.). Движение пера начинается с текущей позиции курсора, а эту позицию можно установить оператором PSET или PRESET.

Для чего предназначен оператор paint

3.10.8. Оператор PAINT

Это графический оператор, закрашивающий ограниченную область указанным цветом или образом.

PAINT [STEP](X,Y)[,[краска],[цвет рамки]]

STEP — определяет координаты как относительные к последней нарисованной точке. Например, если последняя точка была (10,10) ,то координаты с шагом STEP(4,5) будут равны (4+10, 5+10) или (14,15);
X,Y — координаты, где начинается закраска. Точка может быть указана внутри фигуры или вне, но не на границе. Если точка внутри, то закрашивается внутренняя часть фигуры; если точка вне фигуры, то фон;
краска — числовое или символьное выражение.
цвет рамки — числовое выражение, определяющее атрибут цвета границы фигуры. Если цвет границы указан, то площадь ограничивается линиями данного цвета. Если аргумент опущен, используется аргумент краска.
Окраска завершается, когда не осталось ни одной точки в данной области, которая не сменила цвет. Оператор допускает точки границ области за пределами экрана.

SCREEN 1
CIRCLE (106,100), 75, 1
LINE (138,35) — (288,165), 1, B
PAINT(160,100), 2, 1

Глава V. Графические средства MSX BASIC

Первая страницаПредыдущая страницаНазад к обзоруСледующая страницаПоследняя страница

До появления цветной машинной графики результаты работы компьютера были трудны для восприятия. Важная информация терялась среди второстепенной. Машинные игры, например, больше напоминали утомительную работу. Одной из ранних машинных игр была игра «Посадка на Луну». Играющие сидели перед черно-белым экраном, созерцая колонки цифр, говоривших об изменении высоты и скорости спускаемого летательного аппарата. Вводя команды, они пытались добиться надёжной, мягкой посадки на Луну. При неудаче на экране появлялись фразы типа: «Столкновение с поверхностью… Корабль разбит… Никого в живых». При успешной игре, наоборот, на экране можно было прочесть: «Высота 0… Успешная посадка!». Компьютерный «Гольф» был, скорее, упражнением в быстром чтении, чем игрой. Длинные пассажи, описывающие направление движения («Слева от Вас песчаная лунка, а справа дерево. Свободное поле открывается под углом 18 градусов…»), кончались вопросом: «Какую биту Вы выбираете?». После каждого удара возникало новое описание, так что один раунд игры с компьютером занимал почти столько же времени, сколько реальная игра.

В разделах V.1—V.8 мы будем говорить о графических средствах ПЭВМ серии MSX 1, которые для компьютеров серии MSX 2 изменениям не подверглись!

V.1. Оператор SCREEN в простейшем случае (для компьютера MSX 1)

На компьютерах серии MSX 1 существуют четыре режима работы дисплея: два текстовых (символьных) режима и два графических, служащих для индикации соответственно текстовой (символьной) и графической информации. В обоих графических режимах экран рассматривается как сетка из графических элементов — точек (пикселей, от англ. «picture element» — «элемент изображения»). Графическое изображение получается на дисплее путём высвечивания точек различным цветом.

Переключение с одного режима работы на другой (или, как говорят, «с одного экрана на другой») осуществляется оператором

При включении питания компьютер автоматически устанавливается в режим SCREEN 0 . Этот режим обычно используется для ввода программ или для работы с программами редактирования текстов.

Ясно, что в режиме высокого разрешения экран разбивается на большее число точек, чем в режиме низкого разрешения. Вследствие этого, в первом случае точки оказываются гораздо меньшего размера, благодаря чему изображение может содержать существенно большее число деталей.

Отметим, что только в символьных режимах допустимо применение операторов ввода–вывода INPUT и PRINT , т.к. оператор PRINT в графических режимах игнорируется, а использование оператора INPUT в графических режимах SCREEN 2 или SCREEN 3 переводит компьютер в режим SCREEN 0 , после чего вновь необходима установка режима SCREEN 2 или SCREEN 3 соответственно.

Любая пара целых чисел (X,Y) в диапазоне 0≤X≤255, 0≤Y≤191, задаёт на графических экранах SCREEN 2 и SCREEN 3 точку, однако учтите, что в режиме SCREEN 3 блок размером 4×4 точек создаёт изображение одной «точки», поэтому фактические размеры экрана SCREEN 3 — 64×48 укрупнённых «точек»(см. рис. 3).

Для сравнения, стандартный телевизионный монитор (телевизор) имеет разрешающую способность экрана 512×256 точек, а профессиональная микро–ЭВМ фирмы Tektronix (модель 4054) имеет экран с разрешающей способностью 4096×3125 точек.

Отметим, что система координат, изображённая на рис. 3, используется также в таких микро–ЭВМ, как Apple, TRS–80, IBM, Atari.

В любой момент времени одна из точек (α,β) экрана находится в особом состоянии или, как говорят, отмечена графическим курсором. Числа α и β в этом случае называют текущими координатами графического курсора. При включении компьютера графический курсор устанавливается в начальное положение (0,0) — верхний левый угол экрана.

Заметим, что текущие координаты X и Y графического курсора можно определить в режиме SCREEN 0 или SCREEN 1 при помощи команды (оператора)

V.2. Оператор WIDTH. Операторы KEY OFF и KEY ON

Оператор WIDTH используется для установки ширины экрана дисплея в символьных режимах SCREEN 0 и SCREEN 1 (каждому режиму может соответствовать своя ширина экрана). Синтаксис оператора:

После выполнения оператора WIDTH α средняя часть экрана шириной INT(α) становится доступной для ввода или вывода информации.

Отметим, что оператор WIDTH является и командой непосредственного режима. Например, для возвращения к «обычной» ширине экрана используйте команду WIDTH 39 или команду WIDTH 29 .

Отметим, что оператор WIDTH 80 , разрешённый только для компьютера серии MSX 2, позволяет производить отображение 80 символов в одной экранной строке. Ширина символов при этом уменьшается наполовину. (Напомним, что аргумент оператора WIDTH должен лежать в диапазоне от 1 до 80 для компьютеров серии MSX 2).

В результате выполнения оператора

где KEY OFF («key» — «клавиша») — служебное слово, из 24–й строки символьных экранов SCREEN 0 и SCREEN 1 убирается индикация значений функциональных клавиш F1 — F10 . Тем самым эта строка становится доступной для ввода информации (размер экрана увеличивается на одну строку).

отменяет действие оператора KEY OFF и отводит 24–ю строку экрана для индикации значений функциональных клавиш F1 — F10 .

В этой строке удобно показывать вспомогательную информацию, т.к. она в отличие от других не участвует в вертикальном сдвиге содержимого экрана!

V.3. Управление текстовым курсором

В данном разделе речь пойдёт об операторе LOCATE установки текстового курсора «█» (не графического!) и функциях POS(α) , LPOS(α) , CSRLIN управления текстовым курсором.

V.3.1. Оператор LOCATE. Функция CSRLIN. Функции POS(α) и LPOS(α)

Синтаксис оператора LOCATE :

«Illegal function call»
(«Неправильный вызов функции»).

Любой параметр оператора LOCATE может быть опущен, но запятые(запятая!), определяющие его позицию, обязательно должны присутствовать. Если X, или Y, или α опущены, то сохраняются их предыдущие значения. Примеры записи оператора:

Оператор LOCATE перемещает курсор из текущей позиции в позицию (X,Y). Учтите, что данный оператор позволяет управлять курсором только в символьных экранах SCREEN 0 и SCREEN 1 !

Если используются строка или столбец с номерами, большими, чем максимально отображаемые, но меньшими 255, то ошибки не произойдёт, но курсор переместится на максимально возможную позицию экрана дисплея в этом направлении.

С помощью оператора LOCATE можно выводить информацию на текстовый экран, начиная с нужного места.

где CSRLIN («Cursor ScReen LINe» — «строка курсора») — служебное слово, возвращает в символьных экранах SCREEN 0 и SCREEN 1 номер экранной строки, в которой находится курсор.

Учтите, что «верхняя» строка имеет номер нуль, «нижняя» имеет номер или 22 или 23 (в зависимости от того, используется ли эта строка для индикации значений функциональных клавиш).

Пример: табулирование функции y=x² на отрезке [A,B] с шагом H с предотвращением непрерывного вертикального движения (скроллинга) результатов табулирования по экрану (информация движется постранично, «высота» страницы — 22 строки). Напомним: скроллинг — рулонный режим перемещения строк снизу вверх или сверху вниз.
0531-08.bas
0531-08.bas

Функция LPOS(α) («Line Printer Position») указывает позицию печатающей головки MSX–принтера в строке.

Функция LPOS(α) применяется для печати данных «в столбик» на принтере.

V.4. Базовые графические операторы MSX BASIC

Я думаю, что чертежи очень полезное средство
против неопределённости слов.

V.4.1. Оператор COLOR для компьютера MSX 1

На экране дисплея можно выделить три отдельные области: передний план, фон и бордюр. Передний план (изображение) — область, где располагаются цифровые и текстовые данные и графические изображения, которые накладываются на фон.

Фон, как это следует из самого названия, — область экрана, на которой воспроизводится все, что выводится на экран; фон можно видеть сразу же после включения компьютера.

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

Оператор COLOR позволяет задавать различные цвета фона, бордюра и изображения, выводимого на передний план.

Приведём коды 15 возможных цветов для многоцветных дисплеев. Для монохроматических (от греч.«μоvoσ» — «один») дисплеев эти коды задают различные оттенки чёрного и зелёного цветов.

0 Прозрачный
1 Чёрный
2 Зелёный
3 Светло–зелёный
4 Синий
5 Светло–синий
6 Тёмно–красный
7 Голубой
8 Красный
9 Светло–красный
10 Жёлтый
11 Светло–жёлтый
12 Тёмно–зелёный
13 Лиловый
14 Серый
15 Белый

Отметим, что объект прозрачного цвета всегда приобретает цвет бордюра, а бордюр «нулевого» цвета — чёрный (поэтому возможных цветов не 16, а 15)!

Полное отсутствие параметров в операторе COLOR приводит к появлению на экране дисплея сообщения об ошибке:

«Missing operand»
(«Пропуск операнда»),

а слишком большое значение хотя бы одного из параметров — к сообщению:

«Illegal function call».

Заметим, что параметры I, F, B можно не указывать, но если они не последние в записи, то ограничивающие их запятые обязательны. Любой опущенный параметр (обозначенный только запятой перед ним) сохраняет старое значение. Каждый назначенный параметр «действует» до тех пор, пока не получит другое значение в последующем операторе COLOR . Таким образом, Вы можете написать подпрограмму для рисования некоторого объекта, а его цвет определить в основной программе перед обращением к подпрограмме. Приведём примеры записи оператора:

Укажем удобные для работы сочетания оттенков изображения, фона и бордюра для монохроматического зелёного дисплея:

для текстового экрана SCREEN 0 :

для экранов SCREEN 1 , SCREEN 2 и SCREEN 3 :

Внимание! Если Вы случайно установите один и тот же код цвета и для изображения, и для фона, то экран окажется «чистым». В этом случае «вслепую» в непосредственном режиме наберите, например, команду COLOR 1,15 или COLOR 15,4 и нажмите клавишу Ввод ⏎ . На экране появится информация, которая ранее была «невидима»!

Пример. Программа, позволяющая подобрать удобные сочетания цветов изображения, фона и бордюра.
0541-01.bas
0541-01.bas

В любой момент времени Вы можете, нажав на клавишу STOP Вашего компьютера, приостановить работу программы и выписать понравившуюся вам комбинацию значений I, F, B, которая выводится на экран дисплея.

Замечание. Если Вы прервали программу,используя клавиши CTRL + STOP , то можете тут же возвратить начальные значения цветов нажатием клавиш SHIFT + F1 (только для компьютеров серии MSX 2)!

При формировании конкретных изображений необходимо осторожно подходить к выбору цветов. Их случайный выбор может вызвать неприятные ощущения вплоть до раздражения.

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

Если в изображении используется большое число цветов,то для фона лучше выбрать серый или нейтральный тон, причём чёрные контуры вокруг областей разного цвета улучшают восприятие изображения [14].

Отметим различия в выполнении оператора COLOR в режимах SCREEN 1 и SCREEN 2 :

Для проверки вышесказанного сравните следующие программы:

Оператор SCREEN выполняет операцию, аналогичную CLS !

В заключение этого раздела заметим, что коды текущего цвета изображения, фона и бордюра соответственно можно получить, выполнив в непосредственном режиме команду:

V.4.2. Оператор COLOR для компьютера MSX 2

Палитра (от франц.«palette» — «пластинка»), четырёхугольная или овальная деревянная дощечка, металлическая или фарфоровая пластинка для смешивания красок; подбор цветов, которыми пользуется художник.

Советский Энциклопедический Словарь

Известно, что цвета, (пронумерованные в MSX BASIC от 0 до 15), содержат красный («Red»), зелёный («Green») и синий («Blue») цвет в определённых пропорциях.

В приведённой ниже таблице Вы сможете почерпнуть сведения о пропорциях RGB в изначально установленных цветах экрана дисплея:

Номер Цвет R G B
0 Прозрачный 0 0 0
1 Чёрный 0 0 0
2 Зелёный 1 6 1
3 Светло–зелёный 3 7 3
4 Cиний 1 1 7
5 Светло–синий 2 3 7
6 Тёмно–красный 5 1 1
7 Голубой 2 6 7
8 Красный 7 1 1
9 Светло–красный 7 3 3
10 Жёлтый 6 6 1
11 Светло–жёлтый 6 6 4
12 Тёмно–зелёный 1 4 1
13 Лиловый 6 2 5
14 Серый 5 5 5
15 Белый 7 7 7

Программа для иллюстрации таблицы [100] .

Текст программы colors_r.bas

Текст программы colors_r.bas

В компьютере серии MSX 2 эти пропорции могут быть изменены при помощи оператора:

Последние три числа должны находиться в диапазоне от 0 до 7.

Например, пусть значением C является 4 (текущий цвет фона), и попробуйте изменить для него пропорции RGB . Так, для получения чистого красного цвета фона, введите:

Таким образом, можно получить 512 различных оттенков каждого цвета.

Этот полезный оператор позволяет оперировать термином «номер палитры» вместо термина «номер цвета», принятого на компьютерах серии MSX 1.

Отметим, что оператор SCREEN устанавливает палитры в начальное положение. Однако для установки палитры без стирания экрана используйте оператор:

Обратите внимание на то, что палитра не может быть изменена для компьютера серии MSX 1.

Операторы типа COLOR=(4,7,0,0) , COLOR=NEW или COLOR без параметров здесь являются запрещёнными!

V.4.3. Оператор CLS

Существует быстрый способ получить чистый(свободный от изображения) экран дисплея определённого цвета. Оператор

где CLS («to CLear Screen» — «очищать экран») — служебное слово; окрашивает весь экран цветом фона, не меняя положения графического курсора в графических режимах (в символьных режимах после действия CLS курсор помещается в левый верхний угол экрана!).

Помещайте самый первый оператор COLOR в Вашей программе перед операторами SCREEN 2 или SCREEN 3 , в противном случае для изменения цвета фона экрана после оператора COLOR примените оператор CLS . Сравните результаты работы двух фрагментов:

Очистка экрана необходима для того, чтобы получить результат работы программы в «чистом» виде (экран дисплея, как правило, «засорён» текстом, отражающим работу по составлению программы, но не относящимся к её исполнению). Кроме того, использование оператора CLS является элементом «культурного» программирования! Так оратор откашливается перед выступлением, заботясь о том, чтобы все слова донести до слушателей.

V.4.4. Оператор PSET. Оператор PRESET

Первая форма записи оператора PSET :

При попытке использовать оператор PSET в символьных экранах SCREEN 0 и SCREEN 1 , компьютер сообщает об ошибке:

«Illegal function call».

Целые части значений X и Y должны принадлежать отрезку [-32768,32767], а целая часть значения C должна находиться на отрезке [0,15]; по умолчанию (отсутствие параметра C) используется текущий цвет изображения. Если точка (X,Y) находится «вне» графического экрана SCREEN 2 , (вне диапазона 0≤X≤255, 0≤Y≤191), то оператор не оказывает никакого действия. Поэтому, чтобы быть уверенным, что изображение точки строится в пределах экрана, желательно включать в программу проверку условий: 0≤X≤255, 0≤Y≤191.

В результате выполнения оператора PSET графический курсор устанавливается в точку, определяемую параметрами (X,Y), и раскрашивает её цветом, определяемым значением параметра С.

Обратим Ваше внимание на то, что оператор PSET может привести в режиме SCREEN 2 к изменению цвета до 8 расположенных рядом точек в строке, определяемой значением Y. Например:

Дело в том, что каждая из 192 линий экрана SCREEN 2 разбивается на 32 восьмиточечных (восьмипиксельных) сегмента. Каждому сегменту «присваивается» только два цвета — цвет изображения и цвет фона. Отображаемый на экране пиксель имеет цвет изображения, тогда как отсутствие пикселя означает появление пикселя, имеющего цвет фона. Следовательно, для восьмипиксельного сегмента возможно наличие всего двух цветов.

Для режима SCREEN 3 каждый блок точек 4×4 создаёт на экране изображение одной «точки», поэтому любое изменение цвета «маленькой» точки в этом блоке вызывает изменение цвета всего блока.

Итак, вследствие неизбежного побочного эффекта «перетекания цветов», Вы должны быть очень аккуратны, применяя оператор PSET , так как при этом легко можно изменить цвет уже нарисованной части изображения!

А теперь исключите оператор GOTO 30 . Обнаружили разницу при запуске?… Думаем, что да! Запомните этот приём!

Элемент конструкции STEP (X,Y) задаёт смещение координат изображаемой точки на X и Y соответственно относительно текущей позиции графического курсора. Например:

В результате работы данного фрагмента программы на экране дисплея будут изображены две красные точки: (20,20) и (25,27).

1) построение крошечных точек с разной раскраской.
0544-21.bas
0544-21.bas

2) построение графика функции y=0.77x+14×sin(x/6),-128≤x≤127 (объясните назначение операторов PSET(0,95) и PSET(128,0) ).
0544-22.bas
0544-22.bas

Оператор PRESET («Point RESET» — «стирание точки») представим двумя синтаксическими конструкциями:

Здесь элементы @, (X,Y), STEP (X,Y) и С имеют тот же смысл, что и в операторе PSET , однако, при выполнении оператора PRESET без параметра С точка с координатами (X,Y) «стирается», т.е. приобретает цвет фона. Если же параметр С присутствует, то действия операторов PRESET и PSET идентичны.

V.4.5. Оператор LINE

У точек бедных крошек,
Ни ручек нет, ни ножек.
Как же они, не пойму я,
Сцепляются в прямую?

Оператор LINE позволяет изображать отрезки прямых и прямоугольники с одновременной раскраской их требуемым цветом.

Синтаксис оператора LINE :

Обращение к оператору LINE в режимах SCREEN 0 или SCREEN 1 , вызовет сообщение об ошибке:

«Illegal function call».

Если параметр C отсутствует, а параметр B (или BF) присутствует, то перед ним обязательно ставятся две запятые. В этом случае рисунок имеет цвет, заданный ранее оператором COLOR .

Рассмотрим три случая:

В этом случае компьютер проводит на экране линию, имеющую цвет C и соединяющую точки α и β. Примеры записи оператора:

Используя в операторе LINE пропуск координат первой точки ( (X,Y) или STEP(X,Y) ), можно «подхватить» линию с точки, где «остановился» предыдущий оператор, т.е., например, связать прямые линии между собой в ломаную линию. Более того, прежде чем продолжить рисовать, программа может выполнить какие–либо другие действия. Компьютер «не забудет», в какой точке процесс рисования был приостановлен! Если же в операторе указан параметр STEP , то заданные в круглых скобках координаты прибавляются к координатам последней упомянутой позиции графического курсора.

«Относительный»вариант синтаксиса оператора LINE (с использованием параметра STEP ) позволяет рисовать фигуры в «относительных» координатах. Затем можно легко помещать один и тот же объект в различные места экрана, указывая лишь его «начальную» точку!

7) Программа рисования пятиугольника, разделённого на сегменты. Заданы: начальная точка (XB,YB), масштаб (S) и цвет (C).
0545-07.bas
0545-07.bas

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

12) И наконец, о «перетекании цветов». Сравните результаты работы двух программ:

В этом случае компьютер рисует прямоугольник со сторонами цвета C, параллельными «экранным» осям координат, причём, если указаны две точки α и β, то они представляют собой противоположные вершины изображаемого прямоугольника. Внутренняя часть прямоугольника не закрашивается. Если же указана только вторая точка (не забудьте указать перед ней тире !), то в качестве первой используется точка, изображённая или упомянутая в Вашей программе последней.

Вывод: данные примеры совсем не означают, что невозможно создать многоцветные рисунки в режиме SCREEN 2 . Однако, расположение элементов рисунка должно быть тщательно выверено!

При возникновении «конфликтов» между цветом линий и их расположением, параметр BF действует точно так же, как и оператор PSET : он изображает все «задействованные» пиксели, переустанавливает цвет изображения сегмента, тогда как цвет фона остаётся неизменным. Чтобы проверить это, вернитесь к программе, приведённой выше и замените параметр B на BF.

Компьютер, как и в случае β, изображает на экране дисплея прямоугольник, но внутренняя часть его закрашивается цветом С.

V.4.6. Оператор CIRCLE

Noli turbare CIRCilos meos!

по преданию, Архимед встретил этими словами римского солдата—завоевателя, покушавшегося на его жизнь.

С помощью этого оператора компьютер изображает окружности, эллипсы или их дуги (точнее, ту их часть, которая «умещается» на экране дисплея).

Синтаксис оператора CIRCLE :

Отметим, что центр окружности (эллипса) (X,Y) может быть расположен в любой точке координатной плоскости (Вы, конечно, помните, что на экране будут изображены только те точки, координаты которых лежат в пределах 0≤X≤255 и 0≤Y≤191, причём начало координат находится в левом верхнем углу экрана).

Далее, если указан параметр STEP , то координаты центра вычисляются путём сложения координат, указанных после служебного слова STEP с последними упомянутыми координатами графического курсора (относительное задание координат центра);

Важно отметить, что -6.28319≤α, β≤6.28319, причём, если значение α меньше значения β, то дуга окружности (эллипса) проводится против часовой стрелки, а если первое значение больше второго, то — по часовой стрелке!

У компьютера «школьное» представление об окружности: поворот от направления оси OX против часовой стрелки на прямой угол равен π/2 радиан, а полный поворот составляет 2π радиан.

Заметим, что если любой из параметров α, β является отрицательным, то используется его абсолютное значение; при этом соответствующий конец дуги соединяется с центром линией радиуса (это необходимо при построении секторных диаграмм); к сожалению компьютер «не различает» значения параметров α и β, равные (-0) и 0, однако его можно «обмануть», если вместо -0 указать, например, -0.001;

Величина параметра R определяет:

Отметим, что любой необязательный параметр (STEP,C,α,β,γ) может быть опущен — однако соответствующие запятые в записи оператора должны указывать на его отсутствие. После последнего параметра запятая не нужна.

В результате выполнения оператора CIRCLE компьютер нарисует эллипс(или его дугу), после чего графический курсор переместится в точку (R,Y)! Однако, если далее нужно провести другую линию или поставить точку, то графический курсор вначале переместится в точку (X,Y), отмеченную в операторе CIRCLE , а уже затем компьютер будет считать последней упомянутой точкой центр окружности. Оператор графики, ссылающийся на последнюю упомянутую точку, начнёт построение из центра окружности.

На примере показано, как использовать эту возможность, чтобы нарисовать красный леденец на жёлтой палочке:

Ошибки в задании параметров влекут за собой сообщения:

«Syntax error»
(«Синтаксическая ошибка»).

Если компьютер «долгое» время ничего не рисует, то это скорее всего означает, что Вы задали слишком большую величину радиуса окружности, и изображение вышло за рамки экрана дисплея.

R A B T
40 -3.14 -0.79 1
40 6.00 -6.28 1
40 -.79 -2.36 .3
40 0 3.14 1
40 3.14 6.28 1
40 0 6.28 1
40 -0 -3.14 1
40 -.01 -3.14 1
40 0 6.28 4
40 0 6.28 0.25
110 0 3.14 1

К сожалению, оператор CIRCLE не позволяет ориентировать эллипс под любым углом по отношению к горизонтальной оси. Если Вы хотите отобразить такую кривую, воспользуйтесь следующим приёмом:

Сдвиг PI/4 (45 градусов) в программной строке 40 определяет угол наклона большой полуоси эллипса к оси X.

V.4.7. Функция POINT. Оператор PAINT

Синтаксис функции POINT :

Функция POINT в графическом режиме ( SCREEN 2 , SCREEN 3 ) возвращает код цвета точки с координатами (X,Y), т.е. целое число, принадлежащее отрезку [0,15]. На текстовом экране функция POINT всегда возвращает нуль.

Будьте осторожны! Иногда в режиме SCREEN 2 восемь (!) последовательных точек в строке окрашиваются одним цветом, т.к. на 8 соседних в строке точек изображения (с номерами 0÷7,8÷15,…,248÷255) должно приходиться только два цвета: основной и фоновый. Попытка установить для этих восьми точек третий цвет приведёт к переопределению уже имеющихся цветов!

Если точка находится за пределами координатных ограничений (0≤X≤255, 0≤Y≤191), то функция возвращает -1; если точка не принадлежит изображению, то функция возвращает код цвета фона.

Функция POINT в основном используется для:

А теперь замените в условии оператора IF…THEN…ELSE POINT(150,95) на POINT(149,95)… Заметили разницу?!

3) Для закраски точки (X,Y) примените следующий приём:

где точка (U,V) принадлежит фону! Другой способ закраски точки на графическом экране Вы узнаете, изучив оператор PAINT .

Забегая далеко вперёд, отметим, что эта функция игнорирует спрайты. Если точка изображается в белом цвете потому, что скрыта белым спрайтом, возвращаемый цвет соответствует действительному цвету точки.

Для закрашивания областей, ограниченных замкнутыми одноцветными линиями, используется оператор PAINT , синтаксис которого:

«Illegal function call in …»;

параметр STEP , как всегда, указывает смещение закрашиваемой точки от последней упомянутой Вами точки;

Заметим, что если параметр С опущен, а параметр G присутствует, то перед параметром G должны стоять две запятые, указывающие на отсутствие параметра С.

Пусть целые части значений параметров X,Y определяют точку с координатами (X1,Y1).

Обозначим ∑ — совокупность областей, ограниченных замкнутыми линиями цвета C, для которых точка (X1,Y1) является внутренней (если точка принадлежит границе области, то компьютер окажется в «раздумье»: что же ему закрашивать? И… ничего не закрасит!). Если таких областей нет, то примем за ∑ весь экран дисплея. Далее, пусть область σ — пересечение областей семейства ∑. Тогда после выполнения оператора PAINT область σ закрашивается цветом С.

Итак, для закрашивания области необходимо указать:

Отметим, что оператор PAINT — очень «медленный» оператор по сравнению с оператором LINE (с параметром BF); так, закраска всего экрана занимает в режиме SCREEN 2 около 15 секунд. Наконец, учтите, что даже мельчайшая «прореха» в границе (разрыв контура) позволяет оператору PAINT «пролиться наружу» и закрасить те участки экрана, которые Вы и не собирались окрашивать!

Поскольку при выполнении оператора PAINT используется стековая память, понятно, что в процессе закрашивания некоторой области на экране внезапно может появиться сообщение об ошибке:

Вероятность появления такой ошибки повышается, если оператор PAINT является частью «глубоко» вложенных друг в друга циклов FOR…NEXT или подпрограмм, или же если контур, ограничивающий закрашиваемую область, имеет достаточно сложную форму.

V.4.8. Вывод рисунков на принтер

…Вы печатаете на клавиатуре заклинание, и вот экран дисплея оживает, показывая объекты, которых не было и не может быть никогда.

А сейчас мы научим Вас выводить на печатающее устройство (принтер) рисунки, изображённые компьютером на экране дисплея. Для этого используем вспомогательную подпрограмму, записанную в двоичных кодах, загрузка которой в оперативную память компьютера осуществляется подпрограммой с именем HARDCOPY.BAS.

Пример 1 [14]. Восстановим облик хищного тираннозавра (ящера–разбойника), жившего в мезозойскую эру он достигал высоты 5 м, длины 14 м).
0548-01.bas
0548-01.bas

Версия программы без вывода на принтер:
0548-012.bas
0548-012.bas

Пример 2. «Лучше гор могут быть только горы» (В.Высоцкий).

Л.Карпентер и независимо от него А.Фурнье и Д.Фассел изобрели метод «фракталов»(«fractal»), в котором неправильность естественных объектов (линия берега, горы и т.д.) имитируется компьютером за счёт внесения случайных вариаций в представленный художником рисунок, делая гладкие линии изломанными и т.п. Методом фракталов удаётся получать на удивление реалистические горы, долины, с раскиданными по ним валунами, береговые линии, скопления звёзд, цветные географические карты, хлопья снега, ветви деревьев и т.д., а художнику остаётся лишь задать небольшое количество точек. Алгоритм метода изложен в монографии [15].

В пространстве берётся некоторый исходный треугольник и над ним выполняется следующая процедура. Находятся средние точки всех сторон треугольника и переносятся (не обязательно в одной плоскости) на расстояние, пропорциональное длине соответствующей стороны. Коэффициент пропорциональности при этом выбирается случайным образом. Соединяя три получившиеся в результате точки, определяем четыре новых треугольника. Затем та же процедура по очереди применяется к каждому из этих четырёх треугольников. Теперь образуется 16 треугольников и т.д. Таким образом, из одного исходного треугольника можно получить целое множество треугольников, образующих очень сложную полигональную поверхность. Её изображение создаётся обычным образом: удаляются скрытые поверхности, и затем производится закраска.

Приведённая ниже программа позволяет в любой момент времени вывести рисунок, изображённый на экране, «на принтер» по нажатию клавиши P , после чего Вы можете продолжить работу программы, нажав любую клавишу.

Версия программы без вывода на принтер:
0548-022.bas
0548-022.bas

Заметим, что вместо треугольников в алгоритме могут рассматриваться и четырёхугольники, при этом процедура деления лишь незначительно изменится.

Разбиение четырёхугольника показано на рисунке:

Четыре ребра первоначального (закрашенного) четырёхугольника разбиваются с применением случайной функции, в результате чего вычисляются координаты точек P1, P2, P3 и P4. С помощью этих точек, а также случайной функции находится точка P5, и затем определяются четыре новых четырёхугольника.

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

Версия программы без вывода на принтер:
0548-032.bas
0548-032.bas

Версия программы без вывода на принтер:
0548-042.bas
0548-042.bas

Для чего предназначен оператор paint

Правильнее всего рассматривать события на примерах. На практике при обработке события Paint вам в первую очередь потребуется знакомство с PaintEventHandler — делегатом, определенным в пространстве имен System.Windows.Forms одним оператором, который имеет такой вид (в синтаксисе С#):

Если вам кажется, что это прототип функции, вы недалеки от истины. Вторым параметром является класс PaintEventArgs, также определенный в пространстве имен System.Windows.Forms — вскоре мы его рассмотрим.

Для обработки события Paint одной из программ, приведенных ранее в этой главе, нужно определить в классе статический метод с такими же параметрами и таким же типом возвращаемого значения, что и у делегата PaintEventHandler:

Затем этот обработчик события подключается к событию Paint класса Form посредством специальной синтаксической конструкции:

Paint — это событие, определенное в классе Control и, благодаря наследованию, входящее в класс Form. Единственными двумя операторами, применимыми к Paint, являются операторы присваивания += и -=. Оператор += устанавливает обработчик события, подключая метод к событию. Его синтаксис:

При отключении метода от события используется такой же синтаксис, но с оператором -=:

Однако отключение метода от события требуется редко. Обычно обработчик события устанавливается и никогда не отключается от события.

Два параметра обработчика события Paint — объект, который я назвал objSender, и класс PaintEventArgs, для которого я использовал сокращенное название pea. Первый параметр содержит ссылку на объект, к которому применяется событие Paint; в нашем случае это объект form. Данный объект называется отправителем (sender), так как событие исходит от этого объекта.

Класс PaintEventArgs определен в пространстве имен System.Windows.Forms. Он содержит два свойства, Graphics и ClipRectangle, доступные только для чтения:

Тип Свойство Доступ Описание
Graphics Graphics Чтение Крайне важный объект графического вывода
Rectangle ClipRectangle Чтение Недействительный прямоугольник

Свойство Graphics содержит экземпляр класса Graphics, определенного в пространстве имен System.Drawing. Graphics — важнейший класс библиотеки Windows Forms, по важности не уступающий Form. Этот класс служит для рисования графики и вывода текста на форме. В пространстве имен System.Drawing реализована система графического программирования GDI+. Это усовершенствованная версия интерфейса GDI (Graphics Device Interface, интерфейс графического устройства) системы Windows. О свойстве ClipRectangle рассказывается в главе 4.

В подавляющем большинстве программ этой книги вы будете встречать инструкцию:

в первой строке обработчика события Paint. Свой объект типа Graphics вы можете называть как угодно. Кто-то из программистов пишет graphics строчными буквами, но это название настолько длинное, что некоторые просто используют букву g. Я выбрал компромиссный подход.

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

После создания формы в методе Main, метод MyPaintHandler подключается к событию Paint формы. В обработчике события программа получает в составе класса PaintEventArgs объект Graphics и вызывает метод Clear этого объекта. Clear — это простой метод (возможно, самый простой из методов рисования), определенный в классе Graphics.

Методы класса Graphics (выборочно)

Метод Описание
void Clear(Color clr) Закрашивает всю клиентскую область заданным цветом

Параметр метода — объект типа Color, который я подробней рассмотрю в главе 3. Как я упоминал при рассмотрении программы FormProperties , показанной выше, самый простой путь получить цвет — указать одно из 141 имени цветов, являющихся статическими свойствами структуры Color.

Чтобы получить представление о частоте, с которой программа получает события Paint, попробуйте вставить в MyPaintHandler инструкцию:

Кроме того, в следующей главе будет показана пара программ, визуально демонстрирующих частоту возникновения событий Paint.

С этого момента все программы для Windows Forms этой книги будут содержать в начале по меньшей мере три инструкции using.

Вообще говоря, эти инструкции — минимум, необходимый любому нетривиальному приложению Windows Forms.

Можно заметить связь между этими тремя инструкциями using и тремя DLL, ссылки на которые указывались при компиляции программы. Для программистов на С или C++ естественно думать, что инструкции using идентичны директивам препроцессора #include. Но это не так! Инструкции using ближе к инструкциям With языка Visual Basic. Они существуют только для того, чтобы не требовалось вводить полные имена классов. Все, что в программах на С и C++ обычно делают файлы заголовков (например, объявление типов, функций и классов), здесь обеспечивают DLL, указываемые как ссылки (references), и те же DLL связываются с запускаемой программой для реализации этих классов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *