Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Grafika_Turbo-Pascal.doc
Скачиваний:
24
Добавлен:
08.03.2015
Размер:
362.5 Кб
Скачать

Геометрия

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

  1. вывод контура, при этом процедуры вывода прямоугольника и

многоугольника используют стиль линии из SetLineStyle. Процедуры вывода дуги, окружности, эллипса используют сплошной вид линии. Цвет линий определяется процедурой SetColor;

  1. вывод зашрихованных фигур с обводкой контуром. Вид шриховки задается процедурами SetFillStyle и SetFloodPattern.

Точки и линии.

PutPixel (x,y :integer; Color:word) - процедура вывода на экран пикcеля заданного цвета в точку с координатами X,Y.

GetPixel(X,Y:integer):word - функция возвращает цвет пикселя с координатами (X,Y).

Line(x1,y1,x2,y2 : integer) - вывод на экран линии от точки (x1,y1) до точки (x2,y2).

LineTo (x1,y1 : integer) - вывод на экран линии из точки, в которой находится текущий указателдь в т.(x1,y1)

LineRel(dX,dY : integer) - вывод линии от текущего положения указателя в точку на относительное расстояние, заданное dX и dY (т.е. в точку с координатами (x+dx,y+dy)).

Заметим, что следующие три варианта вывода линии эквивалентны:

1 Line(100, 100, 200, 200);

2 MoveTo(100,100);

LineTo(200, 200);

3 MoveTo(100, 100);

LineRel(100, 100);

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

Uses Crt,Graph;

Var Driver,Mode:integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

Randomize;

if GraphResult=0 then

repeat

SetColor(succ(random(4)));

Line(Random(GetMaxX),Random(GetMaxY),

Random(GetMaxX),Random(GetMaxY));

delay(200);

until KeyPressed;

CloseGraph

End.

Многоугольники

Разрешающая способность графического режима определяется количеством выводимых пикселей по горизонтали и вертикали.

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

GetAspectRatio(var Xasp,Yasp:word) - возвращающая максимальное разрешение по x - Xasp, и по оси y - Yasp. Коэффициент сжатия рассчитывается как отношение Xasp/Yasp.

Пример.

Uses Graph,Crt;

Var

X,Y,Driver,Mode:integer;

Xasp,Yasp:word;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'c:\bin\tp');

GetAspectRatio(Xasp,Yasp);

X:=20;

{ подгонка значения Y}

Y:=round(Xasp/Yasp)*X;

{ вывод квадрата }

Rectangle(0,0,X,Y);

readln;

CloseGraph;

End.

Rectangle(x1, y1, x2, y2 : integer) процедура вывода контура прямоугольника, установленным стилем изображения линии и заданным цветом.

Пример. Rectangle(10,10,100,100)

Bar(x1, y1, x2, y2: integer) - процедура изображения закрашенного прямоугольника. Данная процедура не производит обводку контура прямоугольника .

Пример. Bar(10,10,100,100);

Bar3D(x1, y1, x2, y2: integer; Depth:word; Top:boolean) -

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

x1, y1, x2, y2 как и в процедуре Bar.

Depth - значение в пикселях размера изображения для третьего измерения(0-16) - глубины изображения. Нулевой параметр глубины выводит закрашенный прямоугольник.

Top - способ изображения верхней грани. True - вычерчивается, False - нет. Значение Top можно задаать константами.

const

TopOn = true;

TopOff = false;

Это свойство используется для изображения параллелепипедов, поставленных друг на друга.

Пример.

Uses Crt,Graph;

Var Driver,Mode:integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

Bar3D(10,10,110,60,10,TopOn);

Bar3D(10,60,50,110,10.TopOff);

readln;

CloseGraph

End.

DrawPoly(N:word; var PolyPoints:PointType) процедура изображения ломаной линии по N точкам с координатами, заданны-ми типом PointType, определенного как:

type PointType = Record

x, y:word

end;

Для вычерчивания замкнутой фигуры с N вершинами, нужно задавать (n+1) координат, где (n+1)-ая точка совпадает с первой. Например для вычерчивания треугольника нужно задать 4 вершины.

Пример.

Uses Crt,Graph;

Const Triangle : array[1..4] of PointType =

((x:50; y:100),(x:100;y:100), { координаты точек }

(x:150;y:150),(x:50;y:100));

Var Driver,Mode:integer;

Begin

Driver:=Detect;

InitGraph(Driver,Mode,'');

DrawPoly(4,Triangle);

readln;

CloseGraph

end.

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

Процедура FillPoly(N:word; var PolyPoints:PointType) производит штриховку многоугольника и обвод его линией. Параметры N и PolyPoints аналогичны параметрам процедуры DrawPoly. Отличие от DrawPoly состоит в том, что координаты (n+1)-й точки могут не совпадать с первой. Однако эти точки будут все равно соединены и заштрихуется внутренняя область .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]