Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

ГИСТОГРАММЫ И КРУГОВЫЕ ДИАГРАММЫ 

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

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz