2次ベジェ曲線で円弧を描画する

ActionScriptには正円の円弧を描画するメソッドは用意されていない。しかし、上記サイトによれば、2次ベジェ曲線を描くcurveTo()というメソッドが用意されているので、円であれば8分割程度に分割し描画すればかなり正円に近い円弧を描くことが出来るらしい。8分割、つまり45度程度までならばかなり正確である、ということだ。
上記サイトにも円弧を描画するためのアルゴリズムが説明されているのだが、なんか直感的ではない方法に見えたので、以下では、octech流にその一つの弧を描画するためのコードを考えてみることにします。
任意の角度の円弧の半径を R とし、開始角度をθ0、終了角度をθ1とすると次のような図になる。

描画すべき円弧はA0-A1で、そのときのコントロールポイントはCとします。
A0の座標を(A0X, A0Y)、A1の座標を(A1X, A1Y)とし、Cの座標を(CX, CY)とすると、描画する手順は以下のようになる。

// コード#1
// Graphics g に描画するとします.
g.moveTo( A0X, A0Y );
g.curveTo( A1X, A1Y, CX, CY);

後は各座標を決めるだけです。
A0、A1の座標は三角関数の定義よりすぐに求められます。(theta0=θ0; theta1=θ1; R=円の半径;)

// コード#2
var A0X:Number = R * Math.cos( theta0 );
var A0Y:Number = R * Math.sin( theta0 );
var A1X:Number = R * Math.cos( theta1 );
var A1Y:Number = R * Math.sin( theta1 );

O-Cの長さRC三角関数の定義より、もとめられます。
またCは、A0における接線とA1における接線の交点となるので、角度A0-O-Cは (θ1-θ0)/2 となります。(deltaTheta=(θ1-θ0);)

// コード#3
var RC:Number = R / Math.cos(deltaTheta/2);
var CX:Number = RC * Math.cos( theta0 + deltaTheta/2 );
var CY:Number = RC * Math.sin( theta0 + deltaTheta/2 );

以上のコードを#2, #3, #1の順にまとめると、円弧を描くことができますので、drawArcなどと名づけて使いまわすと便利かもしれません。