TURBO PASCAL |
Новости
|
Многоугольники
Процедура Rectangle. Вычерчивает прямоугольник с указанными координатами углов. Заголовок: Procedure Rectangle(X1,Y1,X2,Y2: Integer); Здесь X1... Y2 - координаты левого верхнего (X1, Y1) и правого нижнего (Х2, Y2) углов прямоугольника. Прямоугольник вычерчивается с использованием текущего цвета и текущего стиля линий. В следующем примере на экране вычерчиваются 10 вложенных друг в друга прямоугольников. Uses Graph, CRT; var d,r,e,xl,yl, x2,y2,dx,dy: Integer; begin {Инициируем графику} d := Detect; InitGraph(d, r, ' ') ; e := GraphResult; if e <> grOK then WriteLn(GraphErrorMsg(e)) else begin {Определяем приращения сторон} dx := GetMaxX div 20; dy := GetMaxY div 20; {Чертим вложенные прямоугольники} for d := 0 to 9 do Rectangle(d*dx,d*dy,GetMaxX-d*dx,GetMaxY-d*dy); if ReadKey=#0 then d := ord(ReadKey); CloseGraph end end. Процедура 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. В этой программе ломаная задается в виде многократно накладывающихся друг на друга диагональных линий.
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |