曲率の極値(バーテックス)判定に、なぜベジエ関数表現が有効なのか

σ(t)・w(t)・dκ/dt の分子が「ベジエ関数のまま」扱える理由と、それが数値的判定(Bezier Clipping)に有利な理由をまとめる

  1. 曲率とは何か、何に使われるか
  2. 曲率とその導関数の構造
  3. ベジエ関数が四則演算・微分に対して閉じていること
  4. σ, w, N(t) の次数とベジエ表現の導出
  5. Bernstein基底が数値判定に強い4つの理由
  6. Bezier Clipping が正しく・速く根を求められる理由
  7. まとめ

0.曲率とは何か、何に使われるか

曲率 $\kappa(t)$ とは、曲線が「その点でどれだけ急に曲がっているか」を表す量である。直線では $\kappa=0$、円では半径 $r$ の逆数 $\kappa = 1/r$ で一定になる——つまり曲率はその点に最もよくフィットする円(接触円・曲率円)の半径の逆数として理解できる。曲率が大きいほど鋭く曲がっており、小さいほど緩やかに(直線に近く)曲がっている。符号は曲がる向き(左に曲がるか右に曲がるか)を表す。

曲率半径が小さい(きつく曲がる:緑の円)区間と、大きい(緩やかに曲がる:橙の円)区間

曲率が極値(局所的な最大・最小)を取る点は バーテックス(vertex) と呼ばれ、曲線の形状を特徴づける幾何学的に重要な点である。代表的な利用先は次のとおり。

つまりバーテックス検出とは、曲線のどこが「最もきつく」「最も緩く」曲がっているかを数学的に厳密に求める処理であり、それを高次のベジエ曲線に対しても安定に行うための手法が、本稿で解説する「σ・w・N をベジエ関数のまま扱う Bezier Clipping」である。

1.曲率とその導関数の構造

平面曲線 $C(t) = (x(t), y(t))$ の曲率は

$$ \kappa(t) = \frac{x'y'' - y'x''}{(x'^2 + y'^2)^{3/2}} = \frac{\sigma(t)}{w(t)^{3/2}} $$

と表せる。ここで分子を $\sigma(t) = x'y'' - y'x''$、分母の中身を $w(t) = x'^2 + y'^2$ とおく。曲率の極値(バーテックス)は $\kappa'(t) = 0$ の点であり、商の微分公式から

$$ \kappa'(t) = \frac{\sigma' w - \tfrac{3}{2}\sigma w'}{w^{5/2}} $$

となる。正則な曲線($C'(t) \ne 0$)では常に $w(t) > 0$ なので分母は零にならない。したがって

$$ \kappa'(t) = 0 \iff N(t) := \sigma'(t)\,w(t) - \tfrac{3}{2}\,\sigma(t)\,w'(t) = 0 $$

という「有理式の根探索」問題は、分子 $N(t)$ だけの「多項式の根探索」問題に帰着する。問題はこの $N(t)$ をどう表現し、どう根を求めるかである。

2.ベジエ関数が四則演算・微分に対して閉じていること

$C(t)$ が $n$ 次ベジエ曲線であれば、$x(t), y(t)$ は Bernstein 基底で

$$ x(t) = \sum_{i=0}^{n} P_i^x\, B_i^n(t), \qquad B_i^n(t) = \binom{n}{i} t^i (1-t)^{n-i} $$

と書ける。この表現には、σ・w・N を構成するために必要な3つの演算——微分和差——がすべて「ベジエ関数の枠内で閉じている」という重要な性質がある。

2.1 微分:次数が1下がるベジエ関数になる

$n$次ベジエ関数 $\{P_i\}_{i=0}^n$ の導関数は、$n-1$ 次のベジエ関数として厳密に表せる:

$$ \frac{d}{dt}\sum_{i=0}^n P_i B_i^n(t) = \sum_{i=0}^{n-1} n(P_{i+1}-P_i)\, B_i^{n-1}(t) $$

つまり微分は制御点の「隣接差分×n」を取るだけの単純な線形操作で、近似ではなく厳密な次数 $n-1$ のベジエ関数を与える。

2.2 積:次数が加算されるベジエ関数になる(Bernstein畳み込み)

$m$次ベジエ関数 $\{a_i\}$ と $n$次ベジエ関数 $\{b_j\}$ の積は、$m+n$ 次のベジエ関数として厳密に表せる:

$$ \Big(\sum_i a_i B_i^m\Big)\Big(\sum_j b_j B_j^n\Big) = \sum_{k=0}^{m+n} c_k B_k^{m+n}(t), \qquad c_k = \sum_{i=\max(0,k-n)}^{\min(k,m)} \frac{\binom{m}{i}\binom{n}{k-i}}{\binom{m+n}{k}}\, a_i b_{k-i} $$

これは近似でも数値的な当てはめでもなく、Bernstein基底同士の積 $B_i^m(t)B_j^n(t) = \frac{\binom{m}{i}\binom{n}{j}}{\binom{m+n}{i+j}}B_{i+j}^{m+n}(t)$ という代数恒等式から直接導かれる厳密な等式である。

2.3 和差:次数上げ(Degree Elevation)で厳密に統一できる

σ と w のように次数が異なるベジエ関数を足し引きするには、低い方を目標次数まで次数上げすればよい。$n$次から $n{+}1$次への次数上げは

$$ Q_i = \frac{i}{n+1}P_{i-1} + \Big(1-\frac{i}{n+1}\Big)P_i, \qquad i = 0,\dots,n+1 $$

で与えられ、これは同じ曲線を表す、次数が異なる制御点表現に過ぎない(曲線としては1点も動かない)。したがって次数を揃えたあとの加減算 $A_i \pm B_i$ も厳密である。

ポイント: 微分・積・次数上げはいずれも「近似」ではなく「代数的に等価な別表現への書き換え」である。だからこそ σ, w, N を計算しても丸め誤差以外の誤差が入らない——これは冪基底($1, t, t^2,\dots$)で展開してから同様の演算をするのと本質的に異なる利点である。

3.σ, w, N(t) の次数とベジエ表現の導出

$C(t)$ が $n$ 次のとき、上記の閉包性を使って各関数の次数を積み上げると次のようになる。

関数定義次数根拠
$x', y'$1階微分$n-1$微分で次数 $-1$
$x'', y''$2階微分$n-2$微分で次数 $-1$
$\sigma = x'y''-y'x''$曲率の分子$2n-3$$(n-1)+(n-2)$、積で次数加算
$w = x'^2+y'^2$速度の2乗$2n-2$$(n-1)+(n-1)$
$\sigma'$σの微分$2n-4$微分で次数 $-1$
$w'$wの微分$2n-3$微分で次数 $-1$
$\sigma' w$N の第1項$4n-6$$(2n-4)+(2n-2)$
$\sigma w'$N の第2項$4n-6$$(2n-3)+(2n-3)$
$N = \sigma'w - \tfrac{3}{2}\sigma w'$κ′の分子$4n-6$両項が同次数なので和差もそのまま同次数

2つの項がちょうど同じ次数 $4n{-}6$ に揃う点が構造として美しい。この $N(t)$ は $[0,1]$ 上で定義された「ただのベジエ関数」なので、あとはその実根を $[0,1]$ の中から探せばバーテックスが求まる——これが Bezier Clipping の入力になる。

4.Bernstein基底が数値判定に強い4つの理由

4.1 凸包性(Convex Hull Property)

Bernstein基底は $B_i^n(t) \ge 0$ かつ $\sum_i B_i^n(t) = 1$($t\in[0,1]$)を満たす。したがって曲線上の任意の点は制御点の凸結合であり、必ず制御点が張る凸包の内部に収まる。

制御点(橙)が張る凸包(緑破線)の中に曲線(青)が必ず収まる

この性質により、ある関数値の 零点 を探すとき、「制御点の凸包が $y=0$ の軸と交差しない」ならば、その区間には絶対に根が存在しないことが保証される。逆に交差する場合は「根があるかもしれない範囲」を凸包と軸の交点として安全に切り出せる。この安全性(false negative が起きない)こそが Bezier Clipping の正当性の根拠である。

4.2 変動減少性(Variation Diminishing Property)

ベジエ曲線は、任意の直線に対する交差回数(符号変化の回数)が、制御多角形のそれを超えないという性質を持つ。今回の文脈で言えば、

$$ \#\{t\in[0,1] : N(t) = 0\} \;\le\; \#\{\text{制御点列 } N_0,\dots,N_{4n-6}\text{ の符号変化の回数}\} $$

が成り立つ。つまり制御点の符号を見るだけで「根の個数の上限」が分かる。これにより Bezier Clipping は根を見逃すことなく(完全性)、かつ余計な区間を延々調べ続けることもない(効率性)。

4.3 数値的安定性(冪基底との比較)

冪基底 $1,t,t^2,\dots$Bernstein基底 $B_i^n(t)$
基底関数の符号正負が混在常に非負($[0,1]$上)
係数の意味幾何学的意味を持たない制御点=曲線上の目安点
高次での挙動係数が急激に増大し桁落ちしやすい係数(制御点座標)は曲線のスケールのまま
評価法Hornerでも丸め誤差が蓄積de Casteljau法は凸結合の繰り返しで安定

$N(t)$ は次数 $4n-6$ にもなるため、これを冪基底 $\sum c_k t^k$ に展開すると係数 $c_k$ の大きさが桁違いに暴れ、根の近くで桁落ち(catastrophic cancellation)が起きやすい。Bernstein基底のまま扱えば、係数(=制御点)は常に元の曲線と同じ物理的スケールに収まり、de Casteljauの評価も凸結合の繰り返しにすぎないため数値的に安定する。

4.4 部分区間の切り出しが厳密(de Casteljau分割)

Bezier Clippingでは絞り込んだ区間 $[a,b]\subset[0,1]$ 上の関数を、再び同じ次数のベジエ制御点列として厳密に取り出す必要がある。de Casteljauのアルゴリズムによる分割

$$ [\,P_0,\dots,P_n\,] \xrightarrow{\ t\ } [\,\text{左半分}\,],\ [\,\text{右半分}\,] $$

は近似を含まない厳密な再パラメータ化であり、これを繰り返すことで「区間をどれだけ狭めても表現の精度が落ちない」という反復アルゴリズムに適した性質が得られる。

5.Bezier Clipping が正しく・速く根を求められる理由

  1. 完全性(根を取りこぼさない):4.1・4.2 の性質により、凸包が軸と交差しない区間だけを安全に捨てられる。捨てた区間に根が存在することは原理的にない。
  2. 収束の速さ(おおむね2次収束):凸包による切り出しは、単純な二分法と違って「関数の実際の形」に沿って区間を縮める。直線に近い形の関数(=真の根の近くではよくある)では1回の反復で区間の長さがおよそ2乗のオーダーで縮小する。
  3. 重根・複数根への頑健性:区間があまり縮まらない(縮小率が閾値、実装では0.8を下回らない)場合は中点で2分割して両側を独立に再帰する。これにより、1区間に複数の根がある場合や、凸包が退化するケースも取りこぼさず処理できる。
  4. 停止性:区間幅が許容誤差を下回ったら根として確定する。各反復で区間は単調非増加なので、有限回で必ず終了する。

6.まとめ

曲率 $\kappa(t)$ は有理式だが、その導関数の零点条件は 「分子 $N(t)$ というベジエ関数の零点」 に帰着できる。これが成り立つのは、ベジエ関数(Bernstein基底表現)が という性質を備えているためである。したがって σ, w, N をベジエ関数のまま扱い、Bezier Clipping で $N(t)=0$ を解くという手法は、単に「実装しやすい」だけでなく、根を見逃さないことが数学的に保証され、かつ数値的にも安定した、曲率極値(バーテックス)判定に理にかなったアプローチだと言える。