ベジエクリッピング法が対象に要求するのは、ただ一点、ベルンシュタイン基底で表せることだけである。
したがって、対象がもともとベジエ曲線である必要はない。変換さえできれば、曲線の出自は問わない。
この視点に立つと、本手法は「ベジエ曲線専用の手法」ではなく、広範なパラメトリック曲線に適用できる汎用の求解法と位置づけられる。本稿では、どの曲線がどのように変換でき、変換後に判定関数がどのような次数になり、どう解くのかを整理する。
変換の行き先は次の3通りに分かれる。
| 行き先 | 対象 | 保証 |
|---|---|---|
| 多項式ベジエ曲線 | べき級数、エルミート、Catmull-Rom、B-スプライン など | 厳密 |
| 有理ベジエ曲線 | 円弧・楕円弧・双曲線、NURBS、透視投影像、PH曲線のオフセット | 厳密 |
| 区分ベジエ近似 | クロソイド、インボリュート、螺旋、一般のオフセット など | 近似(誤差を許容値に繰り込めば安全側) |
さらに、パラメータ表示を持たない陰関数曲線も、2変数バーンスタイン形式に変換すれば同じ枠組みに乗る(第6章)。
n 次多項式 f(t) = Σ aᵢtⁱ を区間 [0,1] 上でベルンシュタイン基底に表す。
行列を1回かけるだけで、次数は変わらない。曲線 C(t) = (x(t), y(t)) の各成分に適用すれば、任意の多項式パラメトリック曲線がベジエ曲線になる。
| 元の表現 | 変換方法 | 変換後 |
|---|---|---|
| べき級数 Σaᵢtⁱ | 式 (2) の基底変換 | n 次ベジエ |
| エルミート曲線(2点+接ベクトル) | 線形変換 | 3 次ベジエ |
| Catmull-Rom、Cardinal スプライン | 基底変換行列 | 区分3次ベジエ |
| Kochanek-Bartels(TCB)曲線 | 接ベクトルを求めてエルミート経由 | 区分3次ベジエ |
| ラグランジュ/ニュートン補間多項式 | 基底変換 | n 次ベジエ |
| Chebyshev、Legendre 展開 | 基底変換 | n 次ベジエ |
| B-スプライン曲線 | ノット挿入(Böhm 法)による分解 | 区分 n 次ベジエ |
| CG のイージング曲線 | もともと3次ベジエ | 3 次ベジエ |
B-スプラインからの変換は、各ノットの重複度を次数まで引き上げるノット挿入により行う。この操作は制御点の凸結合のみで構成されるため数値的に安全であり、べき級数からの変換のような桁落ちが生じない。NURBS を扱う際はこの経路を使うのが定石である。
n 次曲面 S(u,v) 上で (u,v) が m 次ベジエ曲線をたどるとき、合成 S(u(w), v(w)) は関数合成により厳密に nm 次のベジエ曲線になる。双3次曲面上の3次曲線なら 9 次である。トリム曲線を空間曲線として扱う場合などに用いる。
n 次有理ベジエ曲線は次式で表される。
N(t) はベクトル値、W(t) はスカラー値でいずれも n 次であり、重み wk > 0 のとき W(t) > 0 である。
円弧・楕円弧・放物線・双曲線は、すべて2次有理ベジエで厳密に表せる。開き角 θ の円弧の場合、両端の接線の交点を中間制御点とし、重みを
とすればよい。w1 < 1 が楕円、= 1 が放物線、> 1 が双曲線に対応する。
この事実は実務上大きい。CAD 図面に現れる円弧・楕円弧・フィレットは、近似なしにそのまま本手法の対象になる。「自分のデータを変換しても形が変わらない」ことが保証される。
| 元の表現 | 変換方法 | 変換後 |
|---|---|---|
| 円弧・楕円弧・双曲線 | 式 (4) の重み | 2 次有理ベジエ |
| NURBS 曲線 | ノット挿入による分解 | 区分 n 次有理ベジエ |
| 射影変換された曲線 | 同次座標での線形変換 | 有理ベジエ |
| 透視投影された空間ベジエ曲線 | 同次座標の除算をそのまま重みとする | 2次元の n 次有理ベジエ |
| PH曲線のオフセット | |C′(t)| が多項式であることを利用 | 有理ベジエ |
| らせん状の一部(有理らせん) | 有理パラメータ化 | 有理ベジエ |
透視投影の項は、3次元の曲線を画面上で扱う際に近似が不要になることを意味する。ピッキング、シルエット、2次元での交差判定が、投影後も厳密に行える。
PH曲線(ピタゴラス・ホドグラフ曲線)は |C′(t)| が多項式になるよう設計された曲線族である。このクラスではオフセット曲線が有理ベジエとして厳密に表現でき、弧長も多項式になる。したがって、一般には近似を要する「オフセットのトリミング」や「弧長パラメータ化・等間隔点配置」が、PH曲線に限れば完全に厳密な枠組みで扱える。
変換後に解く問題は、いずれも「ベジエ関数の零点を求める問題」である。有理の場合は W(t) > 0 であるから、零点の判定は分子だけで行え、分子がベジエ関数である限り凸包性がそのまま成立する。主要な処理の判定関数と次数を示す。
| 処理 | 判定関数(有理の場合は分子) | 非有理 | 有理 |
|---|---|---|---|
| 多項式の解 | f(t) | n | n |
| 導関数の解・極値 | f ′(t) | n−1 | 2n−1 |
| 線分との交差 | n·P(t) − d (有理では n·N − dW) | n | n |
| 線分との最近点 | 上式の微分 | n−1 | 2n−1 |
| 点 Q との2乗距離 | |P(t) − Q|² (有理では |N − QW|²) | 2n | 2n |
| 円との交差 | |P(t) − Q|² − r² (有理では |N−QW|² − r²W²) | 2n | 2n |
| 距離関数の微分 | d/dt |P(t) − Q|² | 2n−1 | 2n−1 |
| 点との最近点 | P′(t)·(P(t) − Q) | 2n−1 | 3n−1 |
| 点からの接線 | (P(t) − Q) × P′(t) | 2n−1 | 3n−1 |
| 変曲点 | P′(t) × P″(t) | 2n−3 | 高々 5n−3 |
| 曲率の極値 | σ′w − (3/2)σw′ (σ=P′×P″, w=|P′|²) | 4n−6 | 高々 10n−6 |
| 曲線どうしの交差 | FAT Line による相互クリップ | n | n |
| 自己交差 | P(s) − P(t) = 0 (s < t) | 2 変数 | 2 変数 |
有理の場合に次数が上がるのは、微分を経由する処理である。P′ = (N′W − NW′)/W² であるから、分子は 2n−1 次となり、これと N − QW(n 次)の積で 3n−1 次になる。W ≡ 1 とすれば非有理の 2n−1 次に戻り、整合する。
次数が上がっても、アルゴリズムは何も変わらない。係数の個数が増えるだけである。凸包判定は符号を見るだけ、クリップは制御点の最小最大を取るだけであり、次数が上がると計算量と数値的安定性の両面から破綻する終結式などの代数的手法とは対照的である。
変換が済めば、あとはすべて同一の手続きである。
バーンスタイン基底は区間 [0,1] 上で非負であり、総和が 1 になる(1 の分割)。したがって
が成り立ち、より強く、f のグラフは制御点 (j/n, bj) の凸包に含まれる。これより2つの判定が導かれる。第1に、係数がすべて同符号ならその区間に零点は存在しない。第2に、制御多角形と t 軸との交点が、零点が存在し得る区間の外側の境界を与える。いずれも保証つきの判定であり、近似ではない。
単根に対する収束次数は 2 であり、重根では 1 次収束に落ちるが、区間が保証つきで縮小するため解を見失うことはない。区間 [0,1] の全零点が重複なく列挙される点が、初期値依存のニュートン法との決定的な違いである。
2曲線の交点は1変数の零点問題にならないため、別の形をとる。一方の曲線を包む平行2直線を FAT Line と呼ぶ。この帯の外では交点が存在し得ないので、他方の曲線のパラメータ範囲を収縮できる。役割を交互に入れ替えて反復すると交点へ収束する。
この考え方は次元を上げてもそのまま通用する。曲面どうしの交差では帯が平行2平面(FAT 平面)になり、動く物体の連続衝突検出では時刻を含む箱に対して同じ判定を行う。
有理パラメータ化できない代数曲線(種数1以上のもの、たとえば楕円曲線)は、これまでの方法では扱えない。しかし陰関数表現なら別の道がある。
f(x, y) = 0 という多項式を、着目する矩形領域上で2変数バーンスタイン形式に変換すれば、そのまま「2変数ベジエ関数の零集合を求める問題」になる。これは曲面の等値線抽出や輪郭線抽出と完全に同一の枠組みである。
結局、曲線は次のいずれかに必ず帰着する。
パラメトリック曲線 → ベジエ曲線に変換 → 1変数の零点問題(解は点)
陰関数曲線 → 2変数バーンスタイン形式に変換 → 2変数の零集合問題(解は曲線)
扱えないのは、フラクタル曲線、ノイズ関数による曲線、解析的表現を持たない実測データ曲線程度である。ただし最後のものは、近似すれば次章の枠に入る。
次の曲線は厳密には有理表現できないが、区分ベジエ近似を挟めば扱える。
| 曲線 | 主な分野 |
|---|---|
| クロソイド(緩和曲線) | 道路・鉄道の線形設計 |
| インボリュート | 歯車の歯形 |
| サイクロイド、トロコイド | 機構設計、ローラーチェーン |
| 螺旋(helix)、対数螺旋 | ねじ、カム |
| 懸垂線、三角関数・指数関数の曲線 | 構造、物理 |
| 一般(非PH)のオフセット曲線 | CAD 全般 |
| 曲面どうしの交差曲線 | ソリッドモデリング |
| 数値解として得られる曲線(測地線、流線) | 解析、可視化 |
歯車のインボリュートやクロソイドは、区分3次ベジエで十分な精度が出ることが知られており、CAD では日常的に行われている変換である。
べき級数からベルンシュタインへの変換(式 (2))は条件数が悪く、高次では桁落ちが生じる。実験では、根が 0.02 間隔で密集した13次多項式まではほぼ 100 % の検出率が保たれたが、さらに密集させ次数を上げると検出率が低下した。次数が高い場合は区間を分割して低次の区分ベジエに分けるほうが安定である。
1本の長い高次曲線より、低次の区分ベジエ列のほうが凸包が締まって棄却がよく効く。数値的安定性と探索効率の両面から、区分化は望ましい。
ノット挿入は制御点の凸結合のみで構成されるため、数値的に安全である。データが NURBS や B-スプラインで与えられている場合は、べき級数を経由せずこの経路を使う。
ベジエクリッピング法は「ベジエ曲線のための手法」ではない。ベルンシュタイン基底へ変換できるすべての曲線に適用できる汎用の求解法である。
多項式曲線は基底変換のみ、円錐曲線と NURBS は有理ベジエとして厳密に、その他は区分ベジエ近似として扱える。パラメータ表示を持たない陰関数曲線も、2変数バーンスタイン形式を経由して同じ枠組みに入る。
変換後は、処理ごとに判定関数の次数が変わるだけで、棄却・クリップ・分割・出力という手続きは完全に共通である。
実質的に、CAD・CG で用いられる曲線はほぼすべて射程内にある。とりわけ円弧が2次有理ベジエで厳密に表せること、および NURBS がノット挿入でベジエ分解できることの2点は、実務者にとって「手持ちのデータがそのまま使える」ことを意味する。