ofxTips-JP

openFrameworksに関する様々なTipsを紹介するブログです。

ofCircleで楽に正多角形を描画する

oFでプリミティブな図形を描画する物には、

ofCircle
ofRect
ofTriangle

などなど様々な関数が用意されていますが、正方形や正三角形正以外の多角形を描画するには工夫が必要です。
まずは真面目に計算してみます。

/*中心点(center)と基準となる円の半径(radius)を定義*/
ofPoint center;
float radius = 50.0;
center.set(50,50);

/*描画*/
ofBeginShape();
for (int i = 0;i < 360;i += (360/6)){ /*360を割る数で頂点数が決まる*/
	ofVertex(center.x+cos(ofDegToRad(i))*radius,
		 center.y+sin(ofDegToRad(i))*radius);
}
ofEndShape();

これは三角関数を用いて、中心点center、半径radiusの円周上に多角形の頂点をプロットしていく方法です。
この方法で描画することもできますが、少しプログラムの行数が多くなってしまいます。

そこで、ofSetCircleResolutionを裏技的に使います。

ofSetCircleResolution(6);
ofCircle(50, 50, 50);

こうすると、たった2行で先ほどと同じように多角形を描画することができます。

実は、ofCircle命令で描画しているのは”限りなく円に近い多角形”です。
本来、より綺麗な円を描いたり、負荷を下げる目的で円の解像度を設定できるのですが、これを利用して正n角系をサクっと描くことができるわけです。