Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Turbo Pascal. Круговая диаграмма (https://forum.antichat.xyz/showthread.php?t=178985)

ZagZag 15.02.2010 11:34

Turbo Pascal. Круговая диаграмма
 
Пишу курсовик. Надо построить круговую диаграмму.
Сектора строятся правильно, а вот надписи к ним ставятся под каким-то непонятным углом.
Код:

        on:array [1..100] of string[20];
        oc:array [1..100] of integer;

...
Код:

        { Вывести on[..] и oc[..] в порядке убывания oc }
        angle_pred:=0;
        clrscr;
  DetectGraph(Device, Mode);
        InitGraph(Device, Mode, 'EGAVGA.BGI');
  SetTextStyle(3, HorizDir, 2);
  SetFillStyle(11, 11);
        repeat
                f := false;
                m := -1; { Текущее наибольшее значение oc }
                for i := 1 to 100 do
                begin
                        if oc[i] > m then
                        begin
                                i2 := i;
                                m := oc[i];
                                f := true;
                        end;
                end;
                if (f = true) then
                begin
      if (oc[i2] > 0) then
      begin
        { Вывести часть диаграммы }
        angle := angle_pred + Trunc(oc[i2] / c * 360);
                                setcolor(12);
                                for a:=0 to 45 do
                                begin
                                        Line(200, 200, 200 + Trunc(120 * cos(a)), 200 + Trunc(120 * sin(a)));
                                end;
{
                                Str(angle, tmp);
                                outtextxy(200 + Trunc(120 * cos(angle)), 200 + Trunc(120 * sin(angle)), tmp);
}
                                setcolor(i2);
                                setfillstyle(i2, i2);
                                setlinestyle(0, 0, 1);
                                PieSlice(200, 200, angle_pred, angle-1, 100);
              angle_pred := angle;
      end;
                        oc[i2] := -1;
                end;
        until (f = false) or ((i=100) and (oc[i2]=0));
        ReadKey;
        CloseGraph;
        RestoreCrtMode;

собственно проблема отмечена красным. По идее должен рисоваться сектор, закрашенный красным, а на практике получается что красные линии раскиданы равномерно по всей диаграмме.
Может быть надо какой-то флаг компилятора включить или что?

ZagZag 16.02.2010 12:39

Неужели никто в досовском паскале круговые диаграммы не делал? Ну что ж вы, народ? XD

n1ghtstalker 16.02.2010 22:50

м) с графикой лучше посидеть всё на бумаге начертить. возьми на листре линий 5 проведи по заданным координатам. мне просто не охота код перебирать.

ZagZag 16.02.2010 23:14

Я всегда думал что построить линию повернутую на заданный угол можно по формуле:

XK = XN + Длина_линии * cos(Угол)
YK = YN + Длина_линии * sin(Угол)

Но в паскале эта формула дает какой-то бред. Совсем не то, что я ожидал.


Время: 00:22