Многоугольники
При вычерчивании используется текущий цвет и текущий стиль линий. Вот как, например, можно с помощью этой процедуры вывести на экран график синуса:
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. В то же время для следующей программы это значение равно 510:
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.
В этой программе ломаная задается в виде многократно накладывающихся друг на друга диагональных линий.