Графические возможности.
Абсолютные и относительные координаты.
Заполненные фигуры
Мы продолжаем изучать
возможности графической библиотеки системы программирования Turbo Pascal 7.0
- Graph.TPU. (Смотри лаб. N 11).
Текущая позиция.
Абсолютные координаты.
Кроме понятий "текущий цвет
рисования" и "текущий цвет фона" существует понятие "текущая позиция".
Текущая позиция - это координаты на экране воображаемого "указателя
координат". Как правило изменение положения "текущей позиции" происходит
"незаметно", при использовании графических процедур и функций.
Кроме процедур и функций
для управления графическим режимом вы изучили несколько процедур и функций,
в которых текущая позиция изменяется при указании абсолютных
(непосредственных) координат экрана. Уточним координаты "текущей позиции"
после их использования:
ClearDevice (0,0).
Line(x1,y1,x2,y2:integer) текущая позиция не изменяется
PutPicsel(x,y:integer; Pixel:Word) текущая позиция не изменяется
Rectangle(x1,y1,x2,y2:integer) текущая позиция не изменяется
Circle(x,y,r:integer) (x,y).
Arc(x,y:integer; StA,EndA,Radius:word); (x,y).
Ellipse(x,y:integer; stA,endA:word; xr,yr: word); (x,y).
Перемещение указателя
координат. Относительные координаты.
Кроме процедур, которые
перемещают текущий указатель выпоняя конкретное действие (создавая
изображение линии или фигуры), существуют специальные процедуры для
изменения положения текущего указателя координат.
MoveTo(x,y:integer);
Перемещает текущий
указатель координат в точку окна с координатами (x,y). Точка на экране не
высвечивается.
MoveRel(Dx,Dy:integer);
Перемещает указатель
координат "позицию" на заданное расстояние (Dx, Dy) по отношению к его
предыдущему положению (точка на экране не высвечивается).
Процедуры MoveTo и MoveRel
выполняют одно и то же действие - перемещение текущего указателя координат.
Но аргументами MoveTo - являются абсолютные координаты экрана, а аргументами
MoveRel - так-называемые относительные координаты. Смещение по отношению к
предыдущему положению называют относительными координатами, или координатами
по отношению к предыдущему положению.
В качестве примера приведём
аналоги процедур MoveTo и MoveRel
LineTo(x,y:integer);
Проводит линию текущего
цвета из текущей позиции в точку с координатами (x,y). Текущая позиция
"указатель" устанавливается в точке (x,y).
LineRel(Dx,Dy:integer);
Проводит линию текущего
цвета из текущей позиции в точку, сдвинутую относительно исходной позиции на
величины (Dx,Dy). Текущая позиция "указатель" перемещается относительно
предыдущего на величину (Dx,Dy).
Определение координат
текущей позиции
GetX: integer;
Возвращает координату X
текущей позиции на экране.
GetY: integer;
Возвращает координату Y
текущей позиции на экране.
Рисование заполненных
фигур.
Все изученные вами
процедуры рисуют с помощью линий. Параметры линий рисования, как вам
известно, задаются с помощью процедуры SetLineStyle. В этом разделе описаны
процедуры для рисования "заполненных" фигур. Параметры рисования заполненных
фигур задаются процедурой SetFillStyle. С её помощью устанавливаются текущий
орнамент рисования и текущий цвет рисования.
SetFillStyle(p:word;
c:word);
Задаёт стандартный орнамент
и цвет заполнения фигур.
p - номер стандартного орнамента;
c - цвет заполнения фигур (номер цвета в палитре).
Константы орнамента
заполнения
0 EmptyFill Заполнение цветом фона
1 SolidFill Однородное заполнение цветом заполнения
2 LineFill Заполнение -----------------
3 LtSlachFill Заполнение ///
4 SlachFill Заполнение /// толстыми линиями
5 BkSlachFill Заполнение \\\ толстыми линиями
6 LtBkSlachFill Заполнение \\\
7 HathFill Заполнение клеткой
8 XHathFill Заполнение косой клеткой
9 InterleaveFill Заполнение частой клеткой
10 WideDotFill Заполнение редкими точками
11 CloseDotFill Заполнение частыми клетками
Контур заполненных
фигур.
Обратите внимание! Цвет
заполнения фигур, ничего общего с цветом рисования линий, который
устанавливается процедурой SetColor не имеет. Цветом, установленным
процедурой SetColor рисуются контура этих фигур. Стиль линии контура
(толщина и прерывистость) устанавливается процедурой SetLineStyle (Смотри
лаб. N 11)
Bar(x1,y1,x2,y2:integer)
Строит прямоугольник,
закрашенный текущим орнаментом и цветом заполнения.
x1,y1,x2,y2 - координаты левого верхнего и правого нижнего углов
прямоугольника.
Координаты текущей позиции
не изменяются.
Bar3D(x1,y1,x2,y2:integer; Depth:Word; Top:Boolean);
Строит параллелепипед,
закрашенный текущим орнаментом и цветом заполнения.
x1,y1,x2,y2 - координаты левого верхнего и правого нижнего углов передней
грани;
Depth - ширина боковой грани (отсчитывается по горизонтали);
Top - признак включения верхней грани (если true - верхняя грань
вычерчивается, если false - верхняя грань не отображается).
Координаты текущей позиции
совпадают с координатами правого, дальнего, верхнего угла паралелепипеда.
При Depth=0, координаты текущей позиции совпадают с координатами левого
верхнего угла.
FillEllipse(x,y:integer;
xr,yr: word);
Строит эллипс, закрашенный
текущим орнаментом и цветом заполнения. x,y - координаты центра эллипса;
xr,yr - горизонтальная и вертикальная полуоси эллипса.
Координаты текущей позиции (x,y).
FloodFill(x,y:integer;
Border:Word);
Закрашивает область,
ограниченную непрерывной линией, текущим орнаментом и цветом заполнения. x,y
- координаты любой точки, внутри закрашиваемой области;
Border - цвет линии, до которой производится закрашивание.
PieSlice(x,y:integer;
stA,endA,r:word);
Строит сектор круга,
закрашенный текущим орнаментом и цветом заполнения. x,y - координаты центра
сектора круга;
stA - начальный угол; (в градусах)
endA - конечный угол; (в градусах)
r - радиус сектора.
Координаты текущей позиции (x,y).
Sector(x,y:integer;
stA,endA,xr,yr:integer);
Строит сектор эллипса,
закрашенный текущим орнаментом и цветом заполнения. x,y - координаты центра
эллипса;
stA - начальный угол; (в градусах)
endA - конечный угол; (в градусах)
xr,yr - горизонтальная и вертикальная полуоси эллипса.
Координаты текущей позиции (x,y).
Контрольные вопросы.
- Какие координаты называют абсолютными?
Приведите пример процедур с абсолютными координатами.
- Какие координаты называют относительными?
Приведите примет процедур с относительными координатами.
- Для каких величин существует понятие "текущий"?
- Опишите процедуры для рисования заполненных
фигур.
- Как изменяются координаты текущей позиции при
применении различных графических процедур и функций?
- Как изменяется текущий стиль и цвет заполнения
фигур?
Задания для
самостоятельного выполнения.
- Нарисуйте картинку "пейзаж" на любую тему.
- Нарисуйте разноцветную мишень.
- Нарисуйте круговую диаграму, состоящую из 10
заполненных секторов, используя различные орнаменты и цвета заполнения.
- Нарисуйте заполненные различным орнаментом и
цветом заполнения треугольник, трапецию и звезду.
- Нарисуйте шестигранную призму, вид сверху и
сбоку. Все видимые грани заполните различным орнаментом и цветом
заполнения.
- Нарисуйте свои инициалы в виде заполненных
многоугольников.
- Изобразите горизонтальную последовательность
состоящую из 16 различных заполненных эллипсов.
- Нарисуйте последовательность из 16 разноцветных
заполненных звёзд.
- Нарисуйте график функции синус, состоящий из 40
паралелепипедов различного цвета и высоты.
- Нарисуйте египетскую "ступенчатую" пирамиду,
вид сверху и сбоку. Грани "освещённые" одинаково заполните одинаковым
цветом и орнаментом.
назад
ДАЛЕЕ