PDA

Просмотр полной версии : Turbo Pascal. Круговая диаграмма


ZagZag
15.02.2010, 11:34
Пишу курсовик. Надо построить круговую диаграмму.
Сектора строятся правильно, а вот надписи к ним ставятся под каким-то непонятным углом.
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(Угол)

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