ベジェ曲線の円の近似で90度以外でもよいが180度以上はよくない
ベジェ曲線の円弧についていままで90度で計算してきた。 しかし、この数字に意味付けはなかった。 ただ単にドローソフトがそういう実装になっていたからだ。
そこで、任意の中心角の円弧をベジェ曲線で曲線近似するときの 制御点の位置を算出してみよう。
ベジェ曲線の近似円弧の制御点位置
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(0≤u≤1)を使って、下記の通りとなる:
P(u)=A(1-u)3+A′3u(1-u)2+B′3u2(1-u)+Bu3 | (3.2) |
ベジェ曲線の中間点Cはu=1/2として
P(12)=A8+3A′8+3B′8+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度の場合のκの値が得られる。
43⋅tanπ/24=4(√2-1)3 | (3.8) |
ベジェ曲線の円弧の中心角

θを変えて描画させてみると、 180度まではまずまずの近似であるが、180度を超えるとかけ離れた概形になってしまう。 180度以上の円弧を描くときは分割が必須である。
まとめ
- 円を分割してベジェ曲線で描画するとき、2分割(中心角180度)以上した方がよい
参考文献
- 三角関数の公式の一覧, Wikipedia (ja)
- s.h's page - [graphic] ベジエ曲線