Система программирования Turbo Pascal



                  


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


h2> DrawPoly.

Вычерчивает произвольную ломаную линию, заданную координатами точек излома.

Procedure DrawPoly(N: Word; var Points)

Здесь N - количество точек излома, включая обе крайние точки; Points - переменная типа PointType, содержащая координаты точек излома.

Координаты точек излома задаются парой значений типа Word: первое определяет горизонтальную, второе - вертикальную координаты. Для них можно использовать следующий определенный в модуле тип:

type

PointType = record

х, у : Word

end;

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

Uses Graph; 

const

N = 100; {Количество точек графика} 

var

d, r, e: Integer;

m : array [O..N+1] of PointType; k : Word; 

begin

{Инициируем графику}

d := Detect; InitGraph(d, r, ''); 

e := GraphResult; if e <> grOk then

WriteLn(GraphErrorMsg(e)) 

else 

begin

{Вычисляем координаты графика} 

for k := 0 to N do with m[k] do 

begin

x := trunc(k*GetMaxX/N); 

у := trunc(GetMaxY*(-sin(2*Pi*k/N)+1)/2) 

end;

{Замыкаем график прямой линией} 

m[succ(N)].x := m[0] .x; 

m[succ(n)].y := m[0] .у; 

DrawPoly(N + 2, m); 

ReadLn; 

CloseGraph 

end 

end.

В этом примере для проведения горизонтальной прямой используется «замыкание» ломаной - первая и последняя координаты ее точек излома совпадают.

Замечу, что хотя количество точек излома N - выражение типа Word, на самом деле внутри процедуры на этот параметр накладываются ограничения, связанные с конечным размером используемой буферной памяти. Вы можете убедиться в этом с помощью, например, изменения N в предыдущем примере: при N=678 график перестанет выводиться на экран, а функция GraphResult будет возвращать значение -6 (не хватает памяти для просмотра областей). Таким образом, для этой программы пороговое значение количества точек излома составляет 679. В то же время для программы

Uses Graph; 

const

N=510; {Предельное значение, при котором на экране еще видна диагональная линия} 

var

d,k: Integer;

Coo: array [1..N] of PointType; 

begin

d := Detect; InitGraph(d,k,' ') ; 

for k := 1 to N do with Coo[k] do 

if odd(k) then 

begin 

X := 0; 

Y := 0 

end 

else 

begin

X := GetMaxX; 

Y := GetMaxY 

end;

DrawPoly(N,Coo); 

ReadLn; 

CloseGraph 

end.

это значение равно 510. В этой программе ломаная задается в виде многократно накладывающихся друг на друга диагональных линий.



Содержание  Назад  Вперед