|
Новости |
ГИСТОГРАММЫ И КРУГОВЫЕ ДИАГРАММЫГрафический инструментарий предоставляет процедуры, позволя- ющие вам нарисовать гистограммы и круговые диаграммы. Существуют две процедуры для реализации круговых диаграмм: DrawPolarPie и DrawCartPie. Они отличаются способом задания местоположения и ра- диуса круговой диаграммы: в полярных или декартовых координатах. Легче пользоваться процедурой DrawPolarPie. Она задается следую- щим образом procedure DrawPolarPie(X, Y, Radius, Theta, Inner, Outer: real; Info: PieArray; Num, Option, TextSize: integer); X,Y - координаты центра, radius - радиус круговой диаграммы и Theta - угол (в градусах) первого сегмента. Параметр Inner и Outer определяют длину линии метки указателя. Info - это матрица типа PieArray, которая определяется следующим образом: type PieType = record Area: real; Text: wrkstring; end; PieArray = array[1..MaxPiesGlb] of PieType; Параметр Num должен определять число сегментов, а Option устанав- ливается в соответствии со следующей таблицей: Значение Option Смысл 0 Нет меток 1 Только текстовые метки 2 Метка из текста и значений 3 Метки только из значений Наконец, параметр TextSize определяет размер машинно-неза- висимых символов, используемых в метках. Программисты, которые используют процедуру DrawPolarPie, должны также включить следую- щие файлы в указанном порядке: {Si circsegm.hgh} {Si pie.hgh} Для использования DrawPolarPie вы должны сначала загрузить 0 значения сегментов в Info.Area и метки, связанные с этими сегмен- тами в Info.Text. Наконец, вы присваиваете соответствующие значе- ния остальным параметрам и рисуете круговую диаграмму. Процедура, следующая далее, рисует программу, показанную на рис.10-7. procedure PlotPie; var Radius, Theta, InRad, OuterRad: real; Mode, Size: integer; Products: PieArray; begin DefineWindow(1, 0, 0, 50, 100); DefineHeader(1, 'Exports in Billions'); DefineWorld(1, 0, 0, 1000, 1000); SelectWorld(1); SelectWindow(1); SetHeaderOn; DrawBorder; Products[1].Text: = 'Wheat S'; Products[2].Text: = 'Corn S'; Products[3].Text: = 'Manu. Goods S'; Products[4].Text: = 'Electronics S'; Products[5].Text: = 'Misc. S'; Products[1].Area: = 15; Products[2].Area: = 12.4; Products[3].Area: = 7.34; Products[4].Area: = -24; {вытолкнуть} Products[5].Area: = 16; Radius: = 125; Theta: = 60; SetAspect(1.0); InRad: = 0.85; DuterRad: = 1.5; Mode: = 2; {установить рисование обеих меток} Size: = 1; {установить малый размер текста} DrawPolarPie(500, 500, Radius, Theta, InRad, OuterRad, Products, 5, Mode, Size); end; {PlotPie} Для того, чтобы нарисовать гистограмму, требуется использо- вать процедуру DrawHistogram, которая декларируется следующим об- разом: procedure DrawHictogram(Info: PlotArray; Num: integer; Hatch: Boolean; HatchStyle:integer); Параметр Info содержит значение, связанное с каждой полосой. ------------------------------------------------------- +---------------------------+ +---------------------------+ +---------------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---------------------------+ +-------------------+ +-------------------+ +-------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +-------------------+ Рис.10-7. Круговая диаграмма и гистограмма Это двумерная матрица, где для любого Info[i,1] зарезервиро- ван для внутреннего использования, а Info[i,2] должен содержать значение полосы для i. Если параметр Hatch равен TRUE, то каждая полоса заштриховывается. Параметр HatchStyle определяет частоту штрихования; значение 1 задает самую частую штриховку. Нельзя ри- совать метки непосредственно используя процедуру DrawHistogram. Вы должны включить следующие файлы в порядке, показанном да- лее, в любую программу, которая использует DrawHistogram: {Si hatch.hgh} {Si histogrm.hgh} Процедура, показанная далее, иллюстрирует использование DrawHistogram. Она порождает гистограмму, показанную на рис.10-7. procedure PlotBar; var Products: PlotArray; begin DefineWindow(2, 40, 110, 70, 180); DefineHeader(2, 'Exports in Billions'); DefineWorld(2, 0, 0, 30, 35); SelectWorld(2); SelectWindow(2); SetHeaderOn; SetBackground(0); DrawBorder; Products[1,2]: = 15; Products[2,2]: = 12.4; Products[3,2]: = 7.34; Products[4,2]: = 24; Products[5,2]: = 16; DrawHistogram(Products, 5, true, 5); DrawTextW(1, 2, 1, 'Wheat Corn Manu. Elec. Misc.'); DrawTextW(1, 7, 1, 'S15 S12.4 S7.34 S24 S16'); end; {PlotBar} Отметим, что метки естественным образом включаются с помощью процедуры DrawTextW. Для вашего удобства гистограмма и круговая диаграмма показа- ны далее в одной программе: program Presentation_graphics; {Si typedef.sys} {Si graphix.sys} {Si kernel.sys} {Si circsegm.hgh} {Si pie.hgh} {Si hatch.hgh} {Si histogrm.hgh} procedure PlotPie; var Radius, Theta, InRad, OuterRad: real; Mode, Size: integer; Products: PieArray; begin ClearScreen; SetColorWhite; DefineWindom(1, 0, 0, 50, 100); DefineHeader(1, 'Exports in Billions'); DefineWorld(1, 0, 0, 1000, 1000); SelectWorld(1); SelectWindom(1); SetHeaderOn; SetBackground(0); DrawBorder; Products[1].Text:='Wheat S'; Products[2].Text:='Corn S'; Products[3].Text:='Manu. Goods S'; Products[4].Text:='Electronics S'; Products[5].Text:='Mics. S'; Products[1].Area:=15; Products[2].Area:=12.4; Products[3].Area:=7.34; Products[4].Area:=-24; {вытолкнуть} Products[5].Area:=16; Radius: = 125; Theta: = 60; SetAspect(1.0); InRad: = 0.85; OuterRad: = 1.5; Mode:=2; {установить рисование обеих меток} Size:=1; { установить малый размер текста } DrawPolarPie(500, 500, Radius, Thete, InRad, OuterRad,Products, 5,Mode, Size); end; {PlotPie} procedure PlotBar; var Products: PlotArray; begin DefineWindow(2, 40, 110, 70, 180); DefineHeader(2, 'Exports in Billions'); DefineWorld(2, 0, 0, 30, 35); 1 SelectWorld(2); SelectWindow(2); SetHeaderOn; SetBackground(0); DrawBorder; Products[1,2]: = 15; Products[2,2]: = 12.4; Products[3,2]: = 7.34; Products[4,2]: = 24; Products[5,2]: = 16; DrawHistogram(Products, 5, true, 5); DrawTextW(1, 2, 1, 'Wheat Corn Manu. Elet. Mias.'); DarwTextW(1, 7, 1, S15 S12.4 S7.34 S24 S16'); end; {PlotBar} begin InitGraphic; PlotPie; PlotBar; repeat untei KeyPressed; LeaveGraphic; end. |
(с)Все права защищеныПо всем интересующим вопросампрошу писать на электронный адрес |