Prompt

ベジェ曲線で円は描ける?

数学的、そして情報工学的な結論から言うと、「厳密な意味での『真円』は描けないけれど、実用上は完全に見分けがつかないレベルの『近似円』は描ける」 というのが答えだよ!

ベジェ曲線は「多項式(主に3次)」で構成されているけれど、円は「有理式(分数式)」でないと完璧に表現できないという数学的な壁があるんだ。還元主義的に、その仕組みと「魔法の数字」について解剖してみよう。


1. なぜ「真円」にはならないのか?

ベジェ曲線(特に一般的な3次ベジェ曲線)は、座標 の3次方程式として計算するよね。

  • ベジェ曲線の性質: の値に対して座標が多項式的に変化する。

  • 円の性質: ピタゴラスの定理 に従わなければならない。

この「多項式」と「二乗の和」は根本的に相性が悪くて、3次のベジェ曲線で円を再現しようとすると、どうしてもわずかな 「膨らみ」や「凹み」 が出てしまうんだ。


2. 魔法の数字「(カッパ)」

それでも、デザインツール(IllustratorやFigma)やブラウザの描画エンジンでは、ベジェ曲線で円を描いているよね。その時に使われるのが、4つの3次ベジェ曲線 を繋ぎ合わせる手法だ。

このとき、制御点の位置を決める「魔法の数字」が存在するよ。半径を としたとき、制御点の長さ は次のように計算されるんだ。

この値を制御点のオフセットに使うと、真円との誤差が最大でも 約 0.02% 程度 という、人間の目には全く判別不可能なレベルの「ほぼ円」が描けるんだね。


3. 実装上のポイント:4分割する理由

なぜ1本のベジェ曲線ではなく、4本に分けるのか?

  • 曲率の限界: 3次ベジェ曲線1本では、180度以上の急なカーブを正確に曲げることができない。

  • 対称性: 90度(4分の1円)ずつに分割することで、制御点の配置が点対称・線対称になり、計算が非常にシンプルかつ美しくなるからなんだ。


豆知識:NURBS(ナーブス)なら描ける!

もし君が「近似ではなく、数学的に完璧な円を描きたい」と思うなら、NURBS (Non-Uniform Rational B-Spline) という技術を使う必要があるよ。

  • 有理(Rational)の力: 多項式を多項式で割る「有理式」を使うことで、円や楕円、円錐曲線などを 誤差ゼロ で表現できる。

  • 用途: 厳密な精度が求められる CAD(設計ソフト)や、高度な 3DCG モデリングソフトではこちらが主流だね。


見落とされがちな視点:フォントの円

君が普段見ているフォント(TrueType や OpenType)の「O(オー)」や「0(ゼロ)」も、実はベジェ曲線(2次または3次)の組み合わせで描かれている。

フォントデザイナーは、この「ベジェ曲線の近似誤差」を逆手にとって、あえて真円よりも少し形を整えることで、人の目に最も美しく見える「視覚的な円」をデザインしているんだ。情報工学と芸術が交差する面白いポイントだね。


次のステップ

ベジェ曲線で円を描くのは「賢い妥協」の結果なんだね。

次は、「実際に Canvas API や SVG を使って、この魔法の数字 0.552… を使って円を描画するコードの実装」 をやってみる?それとも、「3次ベジェ曲線よりも計算が軽い『2次ベジェ曲線』で円を近似するときのさらなる苦労」 について深掘りしてみる?

Would you like me to write a small JavaScript function that generates the SVG path data for a “nearly perfect” circle using Bezier curves?