ベジェ曲線の円弧についていままで90度で計算してきた。 しかし、この数字に意味付けはなかった。 ただ単にドローソフトがそういう実装になっていたからだ。

そこで、任意の中心角の円弧をベジェ曲線で曲線近似するときの 制御点の位置を算出してみよう。

ベジェ曲線の近似円弧の制御点位置

135degree arc using Bézier

AOBのなす角度を90度からθに拡張する。 頂点Bはそのままで、 BB'が頂点Bでの接線、BB'の長さがκとする。 AA'が頂点Aでの接線、AA'の長さも対称性よりκである。

すると、各点の座標は下記のようになる

A:(cosθ,sinθ)B:(1,0)A':(cosθ+κsinθ,sinθ-κcosθ)B':(1,κ)C:(cosθ2,sinθ2) (3.1)

ベジェ曲線の定義より、ベジェ曲線上の任意の点はパラメータu(0u1)を使って、下記の通りとなる:

P(u)=A(1-u)3+A3u(1-u)2+B3u2(1-u)+Bu3 (3.2)

ベジェ曲線の中間点Cはu=1/2として

P(12)=A8+3A8+3B8+B8 (3.3)

となる。

(3.3)式に(3.1)の頂点データを代入することで、x座標成分として

18(4κcosθ+3κsinθ+4) (3.4)

同様に、y座標成分として

18(4sinθ+3κ(1-cosθ)) (3.5)

が得られる。 ここが円弧の中心点Cになるようにすればよい。

よって(3.4)式から

cosθ2=18(4cosθ+3κsinθ+4)8cosθ2=4(2cos2θ2-1)+6κcosθ2sinθ2+48cosθ2=8cos2θ2+6κcosθ2sinθ2κ=8cosθ2-8cos2θ26cosθ2sinθ2=43(1-cosθ2sinθ2)=43·tanθ4 (3.6)

κの値が得られた。

なお、この算出過程でθ=π[rad](=180°)を除外 してしまっている。この場合のみだけ、y軸成分の(3.5)式から計算して出すと

sinθ2=18(4sinθ+3κ(1-cosθ))0=18(0+3κ(1-0))κ=43 (3.6)

となり、結局以下の単一の式で表現できる:

κ=43·tanθ4 (3.7)

アタリマエのことながら、この結果に対してθ=π/2[rad](=90°)を代入することで よく知られた90度の場合のκの値が得られる。

43tanπ/24=4(2-1)3 (3.8)

ベジェ曲線の円弧の中心角

θを変えて描画させてみると、 180度まではまずまずの近似であるが、180度を超えるとかけ離れた概形になってしまう。 180度以上の円弧を描くときは分割が必須である。

まとめ

  • 円を分割してベジェ曲線で描画するとき、2分割(中心角180度)以上した方がよい

しかし、この感覚的な結論は正しくないことが後で判明

参考文献