Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Турбо Паскаль.doc
Скачиваний:
789
Добавлен:
10.04.2015
Размер:
1.84 Mб
Скачать

Var I, j : integer;

ugol : real;

begin

for j:= 1 to n do begin

moveto(x[m,j],y[m,j]);{ установка курсора в m-ную точку ломаной }

for i:= 1 to m do begin { цикл рисования j-ой ломаной по m точкам }

setcolor(i mod 7+9);

lineto(x[i, j], y[i, j])

end end

end;

100

{-----------------------------------------------------------------}

{ процедура расчета координат отражений точки (x, y) относительно центра узора}

Procedure MIRROR(n, m: integer; var x, y: mas);

Var I, j : integer;

r, ugol: real; { координаты точки в полярной системе координат }

begin

for i:= 1 to m do begin

if x[i,1]<>0 then ugol:=arctan(y[i,1]/x[i,1]) else ugol:=Pi/2;

r:= sqrt(1.*x[i,1]*x[i,1]+y[i,1]*y[i,1]);

for j:= 1 to n do begin

ugol:= 4*Pi*j/n - ugol;

x[i,j]:=round(r*cos(ugol)); y[i,j]:=round(r*sin(ugol)) end

end

end;

{ ---------------------------------------------------------------- }

BEGIN Gd:= Detect; InitGraph(Gd, Gm, 'C:\tp7\bgi'); SetWriteMode(1);

xc:= GetmaxX div 2; yc:= GetmaxY div 2; { координаты центра узора }

n:= 12; { число зеркал }

m:= 10; { число узловых точек ломаной }

Rz:= 150; { длина линии зеркала }

for i:= 1 to n do begin alf:= 2. *PI*i/n;

xr:= xc + round(Rz*cos(alf));

yr:= yc - round(Rz*sin(alf));

setcolor(7); line(xr,yr,xc,yc) { построение линий зеркал }

end;

Randomize;

Repeat

for i:= 1 to m do begin {расчет координат точек исходной фигуры }

x[i,1]:= Random(200)+1; y[i,1]:= Random(100) end;

MIRROR(n, m, x, y); { расчет координат отраженных точек

в системе координат узора }

for i:= 1 to m do { расчет координат точек узора}

for j:= 1 to n do begin { в системе координат экрана }

x[i,j]:= x[i,j] + xc; y[i,j]:= y[i,j] + yc end;

UZOR(m,n,x,y); delay(1000); UZOR(m,n,x,y) { рисование узора }

Until KeyPressed; CloseGraph

END.

Практическое задание N 1. 61

1. Смоделировать детский калейдоскоп для набора из трех разноцветных "кристаллов" ( 3-х, 4-х и 5-ти угольников), размещенных в одном секторе.

2. Смоделировать калейдоскоп с 8 осями симметрии. Смещая при каждом изменении фигуры на пять пикселов диапазон задания координат "х" точек исходной ломанной (10 раз увеличивая, затем 10 раз уменьшая получить пульсирующее движение фигур.

3. Смоделировать вращение узора, полученного из отражений ломанной линии.

  1. Смоделировать случайное перемещение узора, полученного из отражений ломанной линии. Контролировать выход узора за границу экрана.

101

1. 15. 3. 4. Работа с текстом в графическом режиме

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

OutText(S); -вывод строки S (типа string) в текущей позиции курсора.

OutTextXY(x,y,S);-вывод строки Sв позиции с координатами (x, y).

Строку S можно определять явно в виде символов, заключенных в апострофы, например, OutText('Sample 1');, или как переменную (константу) типа string. Если требуется вывести значение переменной числового типа, то необходимо приме-нить процедуру ее преобразования в строковый тип. Например:Str(x:10:5,S); -определяем переменную "S" (типа string), полученную преобразованием переменной "x" (вещественного типа) по указанному формату.

Перечислять несколько переменных через запятые (подобно параметрам функций write и writeln) в графических функциях вывода текста не допускается. При выводе нескольких строковых переменных они соединяются знаком "+" , например: OutText('x='+ S);

Для установки стиля вывода текста используется процедура

SetTextStyle(F, D, Z);

где F -номер шрифта, D-направление вывода надписи, Z-увеличение размера относительно базового варианта. Параметры F, D, Z-типа Word.

Шрифт в графическом режиме может создаваться двумя методами. В первом типе шрифта -матричном,берется стандартный шрифтовой набор BIOS ПК, где каждому символу соответствует матрица 8*8 пикселов. Матричный шрифт используется по умолчанию. Изменение размера матричного шрифта производится увеличением исходной матрицы в N-раз: 8N*8N пикселов. При увеличении размера явно проявляется "грубость" матричного шрифта.

Второй тип шрифтов -векторный (штриховой). При этом буквы рисуются как совокупность отрезков, соединяющих узловые точки букв. Качество в этом случае от размера не зависит. Однако вывод текста векторными шрифтами более медленный, чем матричным.

В стандартном наборе BGI определено:

F = 0 (DefaultFont)-8х8 пикселов-матричный шрифт,

векторные шрифты:

F = 1 (TriplexFont)-триплекс (полужирный),

F = 2 (SmallFont)-уменьшенный,

F = 3 (SansSerifFont)-прямой (книжный),

F = 4 (GothicFont)-готический.

Направление шрифта: D= 0 -по горизонтали слева направо,

D= 1 -по вертикали снизу вверх, символы повернуты на 900.

Увеличение размера Zварьируется от 1 до 31 для матричного шрифта и от 1 до 10 для векторных шрифтов. Причем базовый размер соответствуетдля матричного шрифта Z= 1, для векторного шрифта Z= 4. При Z= 0 базовый размер устанавливается по умолчанию.

102

Для векторного шрифта, можно изменить его пропорции относительно базового размера процедурой

SetUserCharSize(XN, X, YN, Y);

При этом (XN/X) -множитель для изменения ширины символов, (YN/Y)-множитель для изменения высоты символов. Параметры XN, X, YN, Y-типа Word.

Текст можно выравнивать относительно позиции его вывода с помощью процедуры

(0,2) (1,2) (2,2)

SetTextJustify(H, V); * * *

(0,1)*_ЦЕНТРИРУЕМЫЙ ТЕКСТ*(2,1)

* * *

Выравнивание по горизонтали: (0,0) (1,0) (2,0)

H = 0-текст справа от позиции вывода, В скобках указаны значения H, V.

H = 1-центрирование текста,

H = 2-текст слева от позиции вывода.

Выравнивание по вертикали:

V = 0 -текст выше позиции вывода,

V = 1 -центрирование текста,

V = 2 -текст ниже позиции вывода.

По умолчанию установлено H= 0, V= 2.

Длину строки S (в пикселах) можно определить функцией TextWidth(S);

Высота строки Sопределяется функцией TextHeight(S);

Если строка не помещается в области экрана, то в случае матричного шрифта эта строка не выводится, а для векторных шрифтов часть строки отсекается.

Цвет текста в графике устанавливается процедуройSetColor(N);где N-номер цвета.

{ --------Пример программы, демонстрирующей различные шрифты:---------}

uses Graph;