Turbo Pascal. Круговая диаграмма

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ZagZag, 15 Feb 2010.

  1. ZagZag

    ZagZag Elder - Старейшина

    Joined:
    22 Feb 2007
    Messages:
    149
    Likes Received:
    22
    Reputations:
    1
    Пишу курсовик. Надо построить круговую диаграмму.
    Сектора строятся правильно, а вот надписи к ним ставятся под каким-то непонятным углом.
    Code:
    	on:array [1..100] of string[20];
    	oc:array [1..100] of integer;
    
    ...
    Code:
    	{ Вывести 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
    					[COLOR=Red]Line(200, 200, 200 + Trunc(120 * cos(a)), 200 + Trunc(120 * sin(a)));[/COLOR]
    				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;
    собственно проблема отмечена красным. По идее должен рисоваться сектор, закрашенный красным, а на практике получается что красные линии раскиданы равномерно по всей диаграмме.
    Может быть надо какой-то флаг компилятора включить или что?
     
    #1 ZagZag, 15 Feb 2010
    Last edited: 15 Feb 2010
  2. ZagZag

    ZagZag Elder - Старейшина

    Joined:
    22 Feb 2007
    Messages:
    149
    Likes Received:
    22
    Reputations:
    1
    Неужели никто в досовском паскале круговые диаграммы не делал? Ну что ж вы, народ? XD
     
  3. n1ghtstalker

    n1ghtstalker Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    м) с графикой лучше посидеть всё на бумаге начертить. возьми на листре линий 5 проведи по заданным координатам. мне просто не охота код перебирать.
     
  4. ZagZag

    ZagZag Elder - Старейшина

    Joined:
    22 Feb 2007
    Messages:
    149
    Likes Received:
    22
    Reputations:
    1
    Я всегда думал что построить линию повернутую на заданный угол можно по формуле:

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

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