Отображение отрезков прямых линий, построение прямоугольников.
Отображение точки на экране
До сих пор речь шла о процедурах и функциях модуля Graph, настраиваю-
щих экран нужным образом перед выводом графических изображений. Теперь поз
накомимся со средствами, позволяющими что-то отображать на экране. В этом разделе мы рассмотрим процедуры и функции, выводящие на экран самые прос-тые изображения - точки и линии.
Какие бы изображения не выводились на экран, все они построены из точек. Имея средство построения точки определённого цвета в нужном месте экрана, теоретически можно создать любое изображение. В библиотеке Graph вывод точки осуществляется процедурой PutPixel
PutPixel(x,y:Integer;Color:Word),
где x,y – экранные координаты точки.
Color – ее цвет берется из установленной палитры
Пользуясь оператором можно получить точечное изображение фигур.
…
PutPixel(159,99,2);
…
Пример 12: Построение окружности радиусом 50 с центром в точках 120, 90. точками.
Program krug;
Uses crt;
Var t: real;Gd,gm: integer;
Begin
Gd:= detect;
Initgraph(gd,gm,’ ’);
T:=0;
While t<6.28 do
Begin Putpixel(round(120+50* cos(t)), round(90+50* sin(t)),2);T:=t+0.5;End;
Readln;
Closegraph; End.
Пример 13: В приведённом примере на экране изображаются 5000 точек. Координаты рисования точки и цвет точки выбирается случайным образом. Запустите интегрированную среду программирования, введите текст программы и запишите на диск, затем откомпилируйте его и проверьте действие программы.
program tochki;
uses crt,graph;
var i,x,y,c:integer;
gd,gm:integer;
begin
clrscr;
gd:=detect;
initgraph(gd,gm,");
randomize;
for i:=1 to 5000 do
begin
x:=random(640);
y:=random(480);
c:=random(15);
Putpixel(x,y,c);
delay(50);
end;
readln;
Closegraph;
end.
Используется процедура Line(x1,y1,x2,y2:Integer)
Где x1,y1 – координаты начальной точки линии
x2,y2 – координаты конечной точки линии.
Для построения отрезка применяются еще две процедуры:
LineTo – строит отрезок из точки текущего положения указателя до точки с координатами (x,y)
LineRel(dx,dy) - проводит отрезок от точки текущего положения указателя до точки (CPx+dx,CPy+dy), где Cpx,Cpy – текущее положение CP.
Пример 14: построение ломаной линии
Program line;
Uses graph, crt;
Var t: real;Gd,gm:integer;
Begin
Gd:= detect;
Initgraph(gd,gm,’ ’);
Line(20,80,80,80);Line(80,80,140,140); Line(100, 140,180,140);
Readln;
Closegraph;
End.
Пример15: В приведённом примере на экране изображается последовательность вертикальных линий. Чтобы получилась именно последовательность линий, а не сплошной прямоугольник, местоположение очередной линии относительно предыдущей сдвигается вправо на десять пикселей. В конце программы осуществляется задержка (чтобы можно было увидеть результат - ReadLn) и выход из графического режима(closegraph). Запустите интегрированную среду программирования, введите текст программы и запишите на диск, затем откомпилируйте его и проверьте действие программы.
program linii;
uses crt,graph;
var i: integer;
gd,gm:integer;
begin
clrscr;
gd:=detect;
Initgraph (gd, gm,");
For i:=1 to 50 do
Line (50+i*10, 50, 50+i*10,400);
readln;
closegraph;
end.
Пример 16: Цветные линии из центра экрана.
Program lin3;
Uses graph, crt;
Var x,y,c,gd,gm:integer;
Begin
gd:= detect;
Initgraph(gd,gm,’ ’);
SetBkcolor(15)
Repeat
x:=round(random(640));
y:= round(random(470));
c:= round(random(16));
setcolor(c);
Line(320,235,x,y);
Until keypressed;
Readln;
Closegraph;
End.
Для черчения линий применяются ещё две процедуры LineTo и LineRel.
Заголовок процедуры:
Procedure LineTo (x, у: integer)
Эта процедура отображает прямую линию от текущей позиции (точки, в которой находится указатель) до точки с заданными координатами. Параметры х и у - координаты точки. Например, если текущий указатель находиться в точке с координатами (100,100), то процедура LineTo(250,150) начертит линию, у которой начало будет в точке с координатами (100,100) а конец в точке с координатами (250,150).
С помощью процедуры LineTo линия отображается с использованием стиля и толщины, определённых процедурой SetLineStyle(cм. далее); при этом используется цвет, заданный с помощью процедуры SetColor. Процедура LineTo очень удобна для вычерчивания различных многоугольников или ломаных линий.
Пример15 программы использования процедуры LineTo:
program primer;
uses crt,graph;
var gd,gm:integer;
begin
clrscr;
gd:=detect;
initgraph(gd,gm,");
MoveTo(50,50);
LineTo(200,100); LineTo(250,150); LineTo(150,250);
LineTo(50,150); LineTo(50,50);
readln;
closegraph;
end.
В приведённом примере на экране изображается многоугольник. Первой в данной программе вызывается процедура MoveTo, которая перемещает указатель текущей позиции в заданную точку экрана. Затем последовательно пять раз вы-зывается процедура LineTo, которая каждый раз отображает очередную сторону нашего многоугольника. В конце программы осуществляется задержка (чтобы можно было увидеть результат - ReadLn) и выход из графического peжимa (CloseGraph). Чтобы многоугольник получился замкнутым, при вычерчивании последней стороны многоугольника процедуре LineTo должны быть переданы те же координаты, которые вначале были сообщены процедуре MoveTo. Запустите интегрированную среду программирования, введите текст программы и запишите на диск, затем откомпилируйте его и проверьте действие программы.
Другая процедура LineRel.
Заголовок процедуры:
Procedure LineRel (Dx, Dy: integer)
Данная процедура отображает прямую линию от текущей позиции и до точки, координаты которой определены относительно положения указателя (т.е. текущей позиции). Параметры Dx и Dy - приращения координат текущей позиции х и у. Например, если указатель находиться в точке с координатами (100,50), то процедура LineRel(250,100) переместит его в точку с координатами (350,150) и при этом между двумя точками будет вычерчена линия. Процедура LineRel, так же как и процедура LineTo(см. выше) хорошо подходит для вычерчивания различных многоугольников или ломаных линий.
Пример18 программы использования процедуры LineRel:
program primer;
uses crt,graph;
var i,j:integer;
gd,gm:integer;
begin
clrscr;
gd:=detect;
initgraph(gd,gm,");
moveto(50,50);
for i:=1 to 10 do
begin
if i mod 2=0 then j :=-150 else j :=200;
LineRel(i+40,j);
end;
readln;
closegraph;
end.
В приведённом примере на экране изображается ломаная линия. Первой здесь вызывается процедура MoveTo, которая перемещает указатель текущей позиции в заданную точку экрана. Затем организуется цикл, в теле которого вызывается процедура LineRel, вычерчивающая на экране очередной участок ломаной линии. В конце программы осуществляется задержка (чтобы можно было увидеть результат - ReadLn) и выход из графического режима(closegraph). В ка-кую сторону направить очередной участок - вверх или вниз - определяется с помощью условного оператора If. Запустите интегрированную среду программ-мирования, введите текст программы и запишите на диск, затем откомпилируйте его и проверьте действие программы.
Turbo Pascal позволяет вычерчивать линии различного стиля: тонкие, широкие, штриховые, пунктирные и т.д. Для того чтобы установить стиль вычерчиваемой линии необходимо воспользоваться процедурой SetLineStyle.
Заголовок процедуры:
Procedure SetLineStyle (Type, Pattern, Thick: Word)
Эта процедура задаёт новый стиль линии. Параметр Туре - устанавливает тип линии, Pattern - шаблон линии, Thick - толщина линии. Тип линии задаётся с помощью набора определённых в модуле Graph констант. Перечень этих констант, соответствующие им числовые коды и образцы линий представлены в таблице 8.
Таблица 8 Константы, коды и образцы типов линий
Имя константы | код | образец |
SolidLn | Сплошная линия | |
DottedLn | Линия из точек | |
CenterLn | Штрихпунктирная линия | |
DashedLn | Пунктирная линия | |
UserBitLn | Узор линии определяет пользователь |
Что же касается параметра Thick, то он может принимать только два значения представленные в таблице 9.
Таблица 9 Константы и коды толщины линии
Имя константы | код | комментарий |
NormWidth | Толщина линии 1 пиксель | |
ThickWidth | Толщина линии 3 пикселя |
Стиль линии, определённый с помощью процедуры SetLineStyle, в дальнейшем используется различными процедурами, отображающими на экране разного рода линии, дуги и фигуры.
Пример 19 программы использования процедуры SetLineStyle:
program primer;
uses crt,graph;
var i,x,y:integer; gd,gm:integer;
begin
clrscr; gd:=detect;
Initgraph (gd,gm,");
randomize;
SetBkColor(15); SetColor(random(14));
SetLineStyle(0,0,l);
Line(50,50,400,50);
SetColor(random(14)); SetLineStyle(1,0,1);
Line(50,75,400,75);
SetColor(random(14));SetLineStyle(2,0,l);
Line(50,100,400,100);
SetColor(random(14));SetLineStyle(3,0,l);
Line(50,125,400,125);
SetColor(random(14));SetLineStyle(0,0,3);
Line(50,150,400,150);
SetColor(random(14));SetLineStyle(1,0,3);
Line(50,175,400,175);
SetColor(random(14));SetLineStyle(2,0,3);
Line(50,200,400,200);
SetColor(random(14));SetLineStyle(3,0,3);
Line(50,225,400,225);
readln;
closegraph;
end.
В приведённом примере на экране изображаются горизонтальные линии. Первой здесь вызывается процедура SetBkColor, которая устанавливает цвет фона, в данном случае белый. Затем случайным образом выбирается цвет вычерчиваемой линии - процедура SetColor. После этого устанавливается стиль линии - процедура SetLineStyle. В конце программы осуществляется задержка (чтобы можно было увидеть результат - ReadLn) и выход из графического режима(closegraph). В данном примере показаны все типы линий. Запустите интегрированную среду программирования, введите текст программы и запишите на диск, затем откомпилируйте его и проверьте действие программы.