ベジェ曲線の円弧についていままで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)\begin{aligned} \text{A:}&(\cos\theta,\sin\theta)\\ \text{B:}&(1,0)\\ \text{A':}&(\cos\theta+\kappa\sin\theta,\sin\theta-\kappa\cos\theta)\\ \text{B':}&(1,\kappa)\\ \text{C:}&(\cos\frac{\theta}{2},\sin\frac{\theta}{2})\\ \end{aligned} (3.1)

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

P(u)=A(1-u)3+A3u(1-u)2+B3u2(1-u)+Bu3 \bm{P}(u)=\bm{A}(1-u)^3+\bm{A}'3u(1-u)^2+\bm{B}'3u^2(1-u)+\bm{B}u^3 (3.2)

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

P(12)=A8+3A8+3B8+B8\bm{P}\left(\frac{1}{2}\right)=\frac{\bm{A}}{8}+\frac{3\bm{A}'}{8}+\frac{3\bm{B}'}{8}+\frac{\bm{B}}{8} (3.3)

となる。

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

18(4κcosθ+3κsinθ+4)\frac{1}{8}(4\cos\theta + 3\kappa\sin\theta + 4) (3.4)

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

18(4sinθ+3κ(1-cosθ))\frac{1}{8}(4 \sin\theta + 3\kappa (1-\cos\theta)) (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\begin{aligned} \cos\frac{\theta}{2}&=&\frac{1}{8} (4 \cos\theta + 3 \kappa \sin\theta + 4)\\ 8\cos\frac{\theta}{2}&=&4 \left(2\cos^2\frac{\theta}{2}-1\right)+6 \kappa \cos\frac\theta2 \sin\frac\theta2+4\\ 8\cos\frac{\theta}{2}&=&8 \cos^2\frac\theta2+6 \kappa \cos\frac\theta2 \sin\frac\theta2\\ \kappa&=&\frac{8 \cos\frac\theta2-8 \cos^2\frac\theta2}{6 \cos\frac\theta2 \sin\frac\theta2}\\ &=&\frac{4}{3} \left({\frac{1-\cos\frac\theta2}{\sin\frac\theta2}}\right)\\ &=&\frac{4}{3}\cdot\tan\frac\theta4 \end{aligned} (3.6)

κの値が得られた。

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

sinθ2=18(4sinθ+3κ(1-cosθ))0=18(0+3κ(1-0))κ=43\begin{aligned} \sin\frac\theta2&=&\frac{1}{8} (4 \sin\theta+3 \kappa (1-\cos\theta))\\ 0&=&\frac{1}{8} (0+3 \kappa (1-0))\\ \kappa&=&\frac{4}{3} \end{aligned} (3.6)

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

κ=43·tanθ4\kappa=\frac{4}{3}\cdot\tan\frac\theta4 (3.7)

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

43tanπ/24=4(2-1)3\frac{4}{3}\cdot \tan\frac{\pi/2}{4}=\frac{4 (\sqrt{2}-1)}{3} (3.8)

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

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

まとめ

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

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

参考文献