研究開発

グラフを描く(3)

第3章 円グラフを描いてみる

つづいては、円グラフです。
円グラフは円弧図形を用いて描きます。
手続きArcByCenter(x, y, radius : REAL; startAngl, sweepAngle : REAL);
を使います。

円グラフは数値を円弧の角度に置き換えたデータを与えます。
始発角度は右水平を0度と考えて、円弧角は全体(360度)を100%とした場合の割合を角度として与えます。
描きはじめを上とするならば、90(度)から、描くたびに描きはじめの角度(startAngle)を変えていく必要があります。

PROCEDURE enGraph;
VAR
	startAngle, sweepAngle : REAL;
BEGIN
	startAngle := 90;

	sweepAngle := 50*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
	startAngle := startAngle - sweepAngle;

	sweepAngle := 30*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
	startAngle := startAngle - sweepAngle;

	sweepAngle := 20*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
END;
Run( enGraph );

残念ながら、このままでは円が描けたように見えてしまいますので、前回にならって色を付けてみましょう。

PROCEDURE enGraph;
VAR
	startAngle, sweepAngle : REAL;
BEGIN
	startAngle := 90;

	FillBack( 0, 65535, 0 );
	PenFore( 0, 65535, 0 );
	sweepAngle := 50*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
	startAngle := startAngle - sweepAngle;

	FillBack( 65535, 0, 0 );
	PenFore( 65535, 0, 0 );
	sweepAngle := 30*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
	startAngle := startAngle - sweepAngle;

	FillBack( 0, 0, 65535 );
	PenFore( 0, 0, 65535 );
	sweepAngle := 20*360/(20+30+50);
	ArcByCenter( 0, 0, 50, startAngle, -sweepAngle );
END;
Run( enGraph );