Circle の描画関数

Siv3D Advent Calendar 2013, 3 日目の記事です。
今日は Circle の描画関数を紹介します。

基本の円描画 draw(color)

# include <Siv3D.hpp>

void Main()
{
	Circle(30, 30, 20).draw(Palette::Yellow);

	Circle(100, 100, 50).draw(Palette::Skyblue);

	Circle(400, 400, 300).draw(Palette::Orange);

	WaitKey();
}

円の枠 drawFrame(innerThickness, outerThickness, color)

# include <Siv3D.hpp>

void Main()
{
	Circle(30, 30, 20).drawFrame(2.0, 0.0, Palette::Yellow);

	Circle(100, 100, 50).drawFrame(10.0, 0.0, Palette::Green);

	Circle(100, 100, 50).drawFrame(1.0, 10.0, Palette::Skyblue);

	Circle(400, 400, 300).drawFrame(250.0, 0.0, Palette::Orange);

	WaitKey();
}

丸いパイを切ったような形 drawPie(startAngle, angle, color)

# include <Siv3D.hpp>

void Main()
{
	Circle(30, 30, 20).drawPie(0.0, Radians(120), Palette::Yellow);

	Circle(100, 100, 50).drawPie(Radians(45), Pi, Palette::Skyblue);

	Circle(400, 400, 300).drawPie(0.0, -Radians(60), Palette::Orange);

	WaitKey();
}

アーチ型 drawArc(startAngle, angle, innerThickness, outerThickness, color)

# include <Siv3D.hpp>

void Main()
{
	Circle(30, 30, 20).drawArc(0.0, Radians(120), 5.0, 0.0, Palette::Yellow);

	Circle(100, 100, 50).drawArc(Radians(45), Pi, 10.0, 10.0, Palette::Skyblue);

	Circle(400, 400, 300).drawArc(0.0, -Radians(60), 200.0, 0.0, Palette::Orange);

	Circle(50, 50, 350).drawArc(HalfPi, HalfPi, 60.0, 0.0, { 255, 64 });

	WaitKey();
}

Siv3D の円の描画にはちょっとした工夫があって、半径が 32px 以下の円は、あらかじめ円がレンダリングされたスプライトを描画し、それより大きい円はその都度適当な分割数のポリゴンを生成しています。
draw() の画像をポリゴンで表示するとこうなります。

こうすることで、小さな円を大量に描画するシーンでは頂点数を節約し、大きな円は最適な品質で描くことができます。