Главная/Раздел 2

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Графические возможности.
Абсолютные и относительные координаты.
Заполненные фигуры

Мы продолжаем изучать возможности графической библиотеки системы программирования 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).

Контрольные вопросы.

  1. Какие координаты называют абсолютными? Приведите пример процедур с абсолютными координатами.
  2. Какие координаты называют относительными? Приведите примет процедур с относительными координатами.
  3. Для каких величин существует понятие "текущий"?
  4. Опишите процедуры для рисования заполненных фигур.
  5. Как изменяются координаты текущей позиции при применении различных графических процедур и функций?
  6. Как изменяется текущий стиль и цвет заполнения фигур?

Задания для самостоятельного выполнения.

  1. Нарисуйте картинку "пейзаж" на любую тему.
  2. Нарисуйте разноцветную мишень.
  3. Нарисуйте круговую диаграму, состоящую из 10 заполненных секторов, используя различные орнаменты и цвета заполнения.
  4. Нарисуйте заполненные различным орнаментом и цветом заполнения треугольник, трапецию и звезду.
  5. Нарисуйте шестигранную призму, вид сверху и сбоку. Все видимые грани заполните различным орнаментом и цветом заполнения.
  6. Нарисуйте свои инициалы в виде заполненных многоугольников.
  7. Изобразите горизонтальную последовательность состоящую из 16 различных заполненных эллипсов.
  8. Нарисуйте последовательность из 16 разноцветных заполненных звёзд.
  9. Нарисуйте график функции синус, состоящий из 40 паралелепипедов различного цвета и высоты.
  10. Нарисуйте египетскую "ступенчатую" пирамиду, вид сверху и сбоку. Грани "освещённые" одинаково заполните одинаковым цветом и орнаментом.

назад                     ДАЛЕЕ

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz