ベジエ関数表現とベジエクリッピング法による パラメトリック曲線の多様な演算の計算法
発表 第1部:多項式の解、曲線処理、距離関数(第1章 11項目+第2章から距離・接線・包含形状 5項目、全16項目)
1.基本の考え方 ― あらゆる問題を「ベジエ関数の零点」へ
パラメトリック曲線・曲面に関する多くの問い(交点、極値、変曲点、曲率の極値、接線、最近点…)は、
最終的に1変数(または2変数)の方程式 f(t) = 0 に帰着します。
ベジエ曲線の座標はベルンシュタイン多項式で表されるため、その和・差・積・微分 もまたベルンシュタイン多項式、すなわちベジエ関数 になります。
ベジエ関数には「制御点の凸包の中にグラフが含まれる」という性質があるので、凸包が t 軸と交わらない区間には解が絶対に存在しない と断言できます。これを繰り返して解の存在区間を削り込むのがベジエクリッピング法(Nishita, Sederberg, Kakimoto 1990)です。
幾何の問い極値・変曲点・最近点…
→
条件式C′(t)=0, C′×C″=0 …
→
ベジエ関数化制御係数 bi を計算
→
ベジエクリッピング凸包で区間を削る
→
全ての解取りこぼしなし
ベジエ関数: f(t) = Σi=0..n bi Bi n (t),
Bi n (t) = n Ci ti (1−t)n−i , t ∈ [0,1]
制御点(グラフ上): ( i/n , bi ) i = 0,…,n ← t 座標は等間隔に固定
性質 ベジエクリッピングでの役割
凸包性 グラフ (t, f(t)) は制御点 (i/n, bi ) の凸包に含まれる → 凸包と t 軸の交差区間の外に解はない。
端点補間 f(0)=b0 , f(1)=bn 。全係数が同符号なら区間内に解なし(即座に棄却)。
分割(de Casteljau) 任意の部分区間 [a,b] の係数を数値的に安定に計算できる。
変動減少性 係数列の符号変化数 ≥ 区間内の根の数。符号変化が1回なら単根が1つ(停止判定に利用可)。
2.ベジエクリッピング法のアルゴリズム
凸包を求める: 制御点 (i/n, bi ) の凸包を作る。
t 軸との交差: 凸包と t 軸の交わり [tmin , tmax ] を求める。交わらなければ「解なし」でこの区間を破棄。
クリップ: de Casteljau 法で [tmin , tmax ] の部分ベジエ関数を切り出し、パラメータを [0,1] に正規化して 1 に戻る。
分割: 1回の反復で区間が 20% 未満しか縮まらない(複数解の可能性)ときは区間を2等分し、両方を独立に処理する。
終了: 区間幅が許容誤差 ε 未満になったら、その中点を解とする。
凸包と t 軸の交差は、符号の異なる係数対 (i, j) を結ぶ線分の t 切片の最小・最大で求められる:
t = i/n + (j/n − i/n) · bi / (bi − bj ) (bi ·bj < 0 の全ての組)
特徴 内容
頑健性 初期値が不要。ニュートン法のような発散・解の見落としがない。
収束性 単根の近傍では1反復ごとに区間幅がほぼ2乗で縮む(2次収束に近い)。
全解探索 区間の2分割を併用すれば、区間内の実根を全て列挙できる。
有理関数 有理ベジエ関数 N(t)/W(t) は重み W>0 なら分子 N(t) の零点 だけを解けばよい。
3.動作例:4次ベジエ関数の全根を求める
「次の反復」を押すと1ステップずつ進みます。図は現在処理中の区間を [0,1] に拡大 した表示です(青=制御多角形、薄青=凸包、赤=凸包と t 軸の交差区間)。係数は書き換えて試せます。
係数 b0 …bn :
設定
次の反復
最後まで
f(t)
制御多角形
凸包
クリップ後の区間
確定した根
4.演算の道具箱 ― ベジエ関数のまま計算するための公式
各種の演算は、以下の5つの道具を組み合わせるだけで「ベジエ関数の係数」として直接計算できます。べき級数に戻す必要はありません。
演算 公式(f: n 次 係数 ai 、g: m 次 係数 bj ) 結果の次数
微分 f′(t) = n Σi=0..n−1 (ai+1 − ai ) Bi n−1 (t) n−1
積 (fg)k = Σi+j=k [ n Ci · m Cj / n+m Ck ] ai bj n+m
次数上げ a′i = (i/(n+1)) ai−1 + (1 − i/(n+1)) ai (和・差の前に次数を揃える) n+1
和・差 次数を揃えた後、係数ごとに加減算 max(n,m)
分割 de Casteljau 法で任意の t で2つのベジエ関数に分ける n
内積・外積 A·B = Ax Bx + Ay By 、A×B = Ax By − Ay Bx (積と和の組合せ) n+m
次数の数え方のコツ: C(t) が n 次なら C′ は n−1 次、C″ は n−2 次。積では次数が足し算になる。
例:C′×C″ → (n−1)+(n−2) = 2n−3 次、|C′|² → 2(n−1) 次、(C−P)·C′ → n+(n−1) = 2n−1 次。
5.演算一覧表(全16項目)
基本的にここで述べる一部演算は既発表であるが、変曲点、曲率の極値、弧長パラメータ化、自己交差、オフセットとトリミング については新規性のある演算である(表中 新規 )。n はベジエ曲線(曲面)の次数。「次数」は解くべきベジエ関数の次数です。
No. 演算 解く方程式(ベジエ関数) 次数 計算のポイント
1 n次ベジエ関数の解 f(t) = Σ bi Bi n (t) = 0 n 基本形そのもの。凸包クリップ+2分割で全根
2 n次多項式の解 p(x) = Σ ai xi = 0 をベジエ形式へ n 根の存在範囲を [0,1] へ写像してから変換
3 べき級数→ベジエ変換 bk = Σi≤k (k Ci /n Ci ) ai n 正方三角行列の積。逆変換も可能
4 曲線の極値 x′(t) = 0、y′(t) = 0 n−1 差分係数 n(Pi+1 −Pi ) を成分ごとに解く
5 変曲点 新規 C′(t) × C″(t) = 0 2n−3 外積を積公式で計算。最高次は常に相殺
6 曲率の極値 新規 N(t) = σ′w − (3/2)σw′ = 0 4n−6 σ=C′×C″, w=|C′|²。次数上げして差を取る
7 弧長パラメータ化 新規 w(t) = |C′(t)|²(速さの2乗) 2n−2 w の凸包で速さの上下限、w′=0 で分割点
8 自己交差 新規 C(t) = C(s), t ≠ s(FAT Line) n 単調区間に分割してから区間対の交差判定
9 オフセットとトリミング 新規 E(u) = (C(u) − P) · C′(u) = 0 2n−1 オフセット点 P から元曲線への最近距離 < |d| なら除去
10 平面から曲面への距離 h(u,v) = n·S(u,v) − d n×m 係数 hij = n·Pij − d をそのまま得る
11 点から曲面への距離 D(u,v) = |S(u,v) − P|² 2n×2m 最近点は Du =Dv =0 の連立
第2章(2次元平面の幾何)からの追加:距離関数と接線
12 線分と曲線の距離(交点・最近点) 交点:d(t) = N·(C(t) − A) = 0 最近点:d′(t) = 0 [5] n / n−1 係数は di = N·(Pi − A)。有理曲線は分子 n 次、微分の分子 2n−1 次
13 点と曲線の距離(最近点) (C(t) − P) · C′(t) = 0 2n−1 |C−P|²(2n 次)の微分。端点も候補。有理曲線は 3n−1 次
14 点から曲線への接線 (C(t) − P) × C′(t) = 0 2n−1 外積=0 で C−P と接線が平行。有理曲線でも 2n−1 次に簡約
15 包含箱(バウンディングボックス) y 軸からの距離 x(t)、x 軸からの距離 y(t) の最大・最小 x′(t) = 0, y′(t) = 0 n−1 極値点+端点で xmin , xmax , ymin , ymax 。任意方向の直線で傾いた箱も可
16 包含円 [6][7] e(t,R) = |P(t) − Q|² − R²(2n 次)の最大値 e′(t) = 0(2n−1 次) 2n / 2n−1 2端点の中点を初期中心とし、最遠点が出れば垂直二等分線上で3点等距離の点へ移動
6.各項目の計算ヒント
1 n次ベジエ関数の解法n 次
制御点を (i/n, bi ) として凸包を作り、t 軸との交差区間 [tmin , tmax ] に削る(第2節)。
区間の縮小が 20% 未満なら2等分。重根の近傍では縮小が遅くなるので、2分割の判断が重要。
早期判定:係数が全て同符号なら解なし、符号変化が1回なら単根が1つ(変動減少性)。
端点で f=0 となる根は隣接区間で重複検出されやすいので、最後に近接解を統合する。
実演
2 n次多項式の解法n 次
実根の範囲をまず限定する:Cauchy の上界 |x| ≤ 1 + maxi<n |ai /an | = R。
x = −R + 2R·t と置換して区間 [−R, R] を t ∈ [0,1] に写し、項目3の変換でベジエ係数を得る(正負で2区間に分けても良い)。
ニュートン法との比較が説得力のある実演になる:ニュートン法は初期値次第で同じ根に集中・発散するが、ベジエクリッピングは全根を確実に列挙。
高次(n ≳ 20)では変換時の桁落ちに注意。区間を分けて個別に変換すると安定。
実演
解説
3 多項式からベジエ関数への変換n 次
p(t) = Σ ai ti (t ∈ [0,1]) ⇒ bk = Σi=0..k ( k Ci / n Ci ) ai
例(3次):b0 =a0 , b1 =a0 +a1 /3, b2 =a0 +2a1 /3+a2 /3, b3 =a0 +a1 +a2 +a3 。
確認:b0 = p(0)、bn = p(1)(全係数の和)になっていれば正しい。
一般区間 [α, β] では先に t = α + (β−α)s を代入(テイラーシフト)してから変換する。
実演
4 n次ベジエ曲線の極値の検出n−1 次
C′(t) = n Σi=0..n−1 (Pi+1 − Pi ) Bi n−1 (t)
x 方向の極値は x′(t)=0、y 方向の極値は y′(t)=0。係数は制御点の差分 n(xi+1 −xi ) で、計算はほぼ不要。
端点 t=0,1 と極値点の座標の最小・最大で、厳密な包含箱(タイトなバウンディングボックス) が得られる。
任意方向 d の極値は d·C′(t) = 0(係数 d·(Pi+1 −Pi ))。
実演
5 n次ベジエ曲線の変曲点の検出2n−3 次
σ(t) = C′(t) × C″(t) = x′(t) y″(t) − y′(t) x″(t) = 0
x′, y′ は n−1 次、x″, y″ は n−2 次。積公式で x′y″ と y′x″ をそれぞれ 2n−3 次で計算し差を取る。
t2n−3 の係数は常に相殺するため、実質の多項式次数は 2n−4(3次曲線なら2次方程式)。ベジエ表現は 2n−3 次のまま扱ってよい。
σ の符号は曲がる向き(左/右)を表す。σ=0 で符号が変わる点だけが真の変曲点(重根は接するだけ)。
実演
6 n次ベジエ曲線の曲率の極値検出4n−6 次
κ(t) = σ / w3/2 , σ = x′y″ − y′x″(2n−3 次), w = x′² + y′²(2n−2 次)
κ′(t) = 0 ⇔ N(t) = σ′w − (3/2)σw′ = 0 (両辺を2倍して 2σ′w − 3σw′ でも可)
σ′ は 2n−4 次、w′ は 2n−3 次。σ′w と σw′ はともに 4n−6 次になるので、そのまま係数ごとに差を取れる。
平方根を含む κ を直接扱わず、分子だけを多項式として取り出す のが要点(有理関数と同じ考え方)。
w = 0(速さゼロ、カスプ)の点は特異点なので別扱い。3次曲線で N は 6 次。
曲率の極値=曲線の「頂点」。フェアリング評価・工具経路の曲率制限に応用できる。
実演
解説
7 ベジエ曲線の弧長パラメータ化2n−2 次
s(t) = ∫0 t √w(τ) dτ, w(t) = |C′(t)|²(2n−2 次のベジエ関数)
弧長は √ を含むため閉じた式にならない。被積分関数の2乗 w をベジエ関数として扱うのがポイント。
w の係数の最小・最大は区間内の速さの上下限を与える(凸包性)→ 数値積分の誤差評価や区間分割の判定に使える。
w′(t) = 0(2n−3 次)で速さの極値を求め、そこで分割するとガウス積分の精度が安定する。
等間隔点は s(t) − kL/N = 0 を解く。s は単調増加なので、区間を保ったままニュートン法/2分法で確実に求まる。
実演
解説
8 n次ベジエ曲線の自己交差の検出FAT Line
そのまま自分自身と FAT Line 交差を行うと、t = s の自明解が全域で検出されてしまう。
対策:項目4の極値(x′=0, y′=0)で曲線を分割する。x, y ともに単調な部分曲線は自己交差しない。
分割した部分曲線の全ての組(隣接組は共有端点を除外)に FAT Line 法を適用する。
FAT Line:一方の曲線の端点を結ぶ直線からの他方の制御点の距離を n 次ベジエ関数として、2本の平行線の間でクリップ。3次曲線の自己交差は高々1点。
実演
9 n次ベジエ曲線のオフセット曲線とトリミング2n−1 次
O(u) = C(u) + d · N(u)(N は単位法線)
E(u) = (C(u) − P) · C′(u) = 0 … 点 P から C への垂線の足(2n−1 次)
オフセット曲線は一般に多項式・有理式にならないので、点列または近似曲線で表す。
トリミング判定:オフセット上の点 P について E(u)=0 の全解と端点で |C(u)−P| の最小値を求め、それが |d| より小さければ P は不正(除去)。
凹側でカスプが生じるのは曲率半径 1/|κ| が |d| と一致する点。項目6の曲率と組み合わせると切り替わり点が予測できる。
|C(u)−P|² は 2n 次で、その微分 /2 が E(u)。「距離関数の微分=0が最近点」という統一的な枠組みの好例。
実演
解説
10 面から曲面への距離関数n×m 次
h(u,v) = n·S(u,v) − d = Σi Σj (n·Pij − d) Bi n (u) Bj m (v)
平面(単位法線 n、オフセット d)からの符号付き距離は、制御点に対する距離 hij がそのまま係数になる(計算量は制御点数だけ)。
2変数のクリップ:u 方向は制御点 (i/n, hij ) を全ての j について u-h 平面へ投影し凸包をとる。v 方向も同様に交互に削る。
2平面で交互にクリップすれば直線(レイ)との交点になる(1990年のレイトレーシングの原理)。第2部の曲面演算の基礎。
実演
11 点から曲面への距離関数2n×2m 次
D(u,v) = |S(u,v) − P|² (2n×2m 次)
最近点: (S − P)·Su = 0((2n−1)×2m 次)かつ (S − P)·Sv = 0(2n×(2m−1) 次)
D は2乗距離なので √ を使わずに多項式のまま扱える。各成分の積を2変数版の積公式(u, v 方向それぞれに1変数の積公式)で計算する。
D の係数の最小値は区間内の距離の下限を与えるので、「この部分曲面は遠い」と即座に枝刈りできる(球との衝突・最近点探索)。
連立方程式 Du =Dv =0 は、両関数の (u,v) パッチを同時にクリップして解の存在領域を削る。境界(u,v=0,1)上の最小値も忘れずに調べる。
実演
第2章からの追加項目:線分・点からの距離関数と接線
12 線分とベジエ曲線の距離(交点・最近点)n 次 / n−1 次
線分 AB の単位法線 N に対し: d(t) = N·(C(t) − A) = Σi N·(Pi − A) Bi n (t) (n 次)
交点:d(t) = 0 / 最近点(交点がない場合):d′(t) = n Σ (di+1 − di ) Bi n−1 (t) = 0 (n−1 次)
係数は「各制御点から直線への符号付き距離」di = N·(Pi − A) だけ。直線を x 軸に回転移動したときの y 座標と同じで、計算量は制御点数のみ。
d(t)=0 は無限直線との交点なので、得られた点の線分パラメータ s = (C(t)−A)·(B−A)/|B−A|² が 0 ≤ s ≤ 1 のものだけを採用する。
交点がないときの最短距離は ① d′(t)=0 の点(曲線上で直線に最も近い点)、② 曲線の端点 t=0,1、③ 線分の端点 A, B から曲線への最近点(項目13)の中の最小値。①で s が [0,1] 外なら③に任せる。
FAT Line(曲線同士の交差)は、この「直線からの距離関数」を2本の平行線の間でクリップするものであり、本項目がその基礎になる。
拡張:有理ベジエ曲線 は d(t) = Σ wi di Bi n / W(t) なので交点は分子(n 次)を解く。最近点は (h′W − hW′) = 0 で 2n−1 次(h は分子)。エルミート曲線・Bスプライン はベジエ区間に変換すれば同じ処理。
実演
交点
有理曲線
エルミート
Bスプライン
NURBS
関連発表:[5] (NURBS曲線と線分の交差・最近距離)
13 点とベジエ曲線の距離(最近点)2n−1 次
D(t) = |C(t) − P|² = Σk=0..2n Dk Bk 2n (t) (2n 次)
最近点:D′(t)/2 = (C(t) − P) · C′(t) = 0 (n 次 × (n−1) 次 → 2n−1 次)
C(t)−P の係数は Pi − P(制御点を P だけ平行移動するだけ)。x, y 成分ごとに積公式で (x−px )x′ + (y−py )y′ を計算する。
解は極小・極大の両方を含むので、全ての解と端点 t=0, 1 で D を評価し最小のものを選ぶ。端点は解に現れないことが多いので必ず候補に入れる。
枝刈り:D の係数の最小値は区間内の距離² の下限。現在の最良値より大きい区間は解かずに捨てられる(多数の曲線区間を扱うときに有効)。
同じ式は項目9(オフセットのトリミング)の判定式 E(u) そのもの。
拡張:有理ベジエ曲線 C = R/W では G = R − PW(n 次)とおくと C − P = G/W、最近点条件は G·(G′W − GW′) = 0 で 3n−1 次になる。
実演(有理曲線)
非有理版の実演は追加予定
14 点からベジエ曲線への接線2n−1 次
接点の条件:f(t) = (C(t) − P) × C′(t) = (x−px ) y′ − (y−py ) x′ = 0 (2n−1 次)
C(t)−P と接線方向 C′(t) が平行(外積が0)な t が接点。項目13の内積を外積に置き換えただけで、同じ積公式で計算できる。
f の符号は「点 P が曲線のどちら側にあるか」を表す。符号の変わる点が接点であり、得られた全ての t で P から C(t) に引いた直線が接線になる。
注意:C′(t) = 0(速さゼロのカスプ)や P が曲線上にある点でも f = 0 になるので、|C′| と |C−P| を確認して除外する。
応用:シルエット(輪郭)検出の2次元版であり、第2部の曲面の輪郭線 (S − E)·N = 0 に直結する。視点 P から見た曲線の可視境界も得られる。
拡張:有理ベジエ曲線 でも G = R − PW とおくと条件は G × G′ = 0 に簡約され(G×G = 0 の項が消える)、次数は同じ 2n−1 次。
実演
第2章からの追加項目:包含箱・包含円
15 ベジエ曲線の包含箱(バウンディングボックス)n−1 次
y 軸(直線 x = 0)から曲線への符号付き距離:dy (t) = x(t) = Σ xi Bi n (t) (n 次)
x 軸(直線 y = 0)から曲線への符号付き距離:dx (t) = y(t) = Σ yi Bi n (t) (n 次)
最大・最小の候補:x′(t) = 0、y′(t) = 0(n−1 次)の解と端点 t = 0, 1
項目12「直線からの距離関数」で直線を座標軸にとった特別な場合。距離関数の微分=0の点が最遠・最近点なので、その最大・最小が箱の辺になる。
x′ の係数は n(xi+1 − xi ) で、制御点の差分だけで得られる(項目4の極値と同じ計算)。
端点は x′=0 の解にならないことが多いので、必ず x0 , xn (y も同様)を候補に入れる。
早期判定:制御点の x 座標が単調(x′ の係数が同符号)なら極値はなく、箱は端点だけで決まる。
制御点の箱(凸包の箱)は簡単だが大きすぎる。本方法の箱は曲線に接する厳密な(タイトな)箱 。
拡張:任意の単位ベクトル d の直線を使えば d·C′(t) = 0 で傾いた箱(OBB)が得られる。主軸方向や曲線の弦方向を使うと箱がさらに小さくなる。有理曲線では分子 x′W − xW′(ベジエ表現 2n−1 次、最高次が相殺し実質 2n−2 次)を解く。
実演は追加予定(曲面版は第2部「NURBSの包含箱・包含球」) 関連発表:[6] [7]
16 ベジエ曲線の包含円2n 次の距離関数 + 2n−1 次の微分
円の中心 Q、半径 R からの距離関数(文献[6]の方法):
e(t, R) = D(t) − R² = |P(t) − Q|² − R² = Σk=0..2n dk Bk 2n (t) − R² (2n 次)
微分:e′(t) = 2n Σk=0..2n−1 (dk+1 − dk ) Bk 2n−1 (t) (隣接する係数の差だけで構成)
係数は pi = Pi − Q の内積で得られる。n = 3 の場合:
d0 =p0 ·p0 , d1 =p0 ·p1 , d2 =0.4 p0 ·p2 +0.6 p1 ·p1 , d3 =0.1 p0 ·p3 +0.9 p1 ·p2 ,
d4 =0.4 p1 ·p3 +0.6 p2 ·p2 , d5 =p2 ·p3 , d6 =p3 ·p3
初期値: 2端点の中点 Q0 = (P0 + Pn )/2 を中心、端点までの距離を半径 R とする(2端点を直径の両端とする円)。
早期判定: 凸包性より、係数の最大値 dmax ≤ R² なら曲線全体が円の内側にあり、終了。また、隣り合う係数がともに dk < R², dk+1 < R² となる区間 k(2n 区間のうちの1つ)は円外の部分を含まないので切り捨てる。
最遠点の検出: 残った区間で e′(t) = 0 となる点をベジエクリッピング法で求める。距離関数は最大値付近で上に凸なので、両端からクリップされて速く収束する。精度が必要なのは最大値付近だけで、それ以外は粗い判定でよい。
中心の移動: 最遠点 F までの距離が R より大きければ、Q を2端点の垂直二等分線上 で移動し、2端点と F の3点までの距離がすべて等しくなる点(3点の外接円の中心)を新しい中心とする。
M を端点の中点、u を弦 Pn −P0 に垂直な単位ベクトルとすると、Q = M + s u,s = (|M−P0 |² − |M−F|²) / (2 u·(M−F))。
繰り返し: 新しい Q, R で 2.〜4. を繰り返し、最遠距離が R 以下になったら終了。
注意: 包含円の中心は一般に2端点の中点か、その垂直二等分線上にある。ただし端点での接線方向によっては、包含円が端点を通らない場合がある(文献[6]図6右)。下の実演では、外接円が最小にならない場合(3点が鈍角三角形をなす場合など)に、それまでに得た点の最小包含円 (2点を直径とする円または3点の外接円)に切り替えている。
3次元・曲面への拡張: 距離関数に z 成分を加えるだけで包含球になる。曲面 P(u,v) では4隅の点を包含する球から始め、u 方向と v 方向を交互にクリップして最遠点を求め、最遠点の方向へ Q を移動する。
交差判定との関係: 包含円は「距離関数の最大値 (e′ が正から負に変わる極大)」、円と曲線の交差・最近点は「距離関数の最小値 (e′ が負から正に変わる極小)」を求める。どちらも同じ距離関数と同じアルゴリズムで処理できる。
多数点のサンプリングによる方法(計算量が大きい)や、制御多角形から求める方法(円が大きめになる)に比べ、最小に近い包含円を効率よく得られる。
実演:包含箱(項目15)と包含円(項目16)
制御点(青丸)をドラッグすると、包含箱と包含円をその場で再計算します。
灰色の破線=包含箱、緑の破線=初期円(2端点の中点が中心)、薄い円=反復途中の円、赤=最終の包含円、橙の×=検出した最遠点。
例1:中心を垂直二等分線上で移動
例2:端点を通らない包含円
例3:初期円で終了(dmax ≤ R²)
反復途中の円を表示
反復 中心 Q 半径 R dmax (係数最大) 最遠点距離 処理
関連発表:[6] [7] (距離曲線による包含球の計算と交差判定)
7.まとめ
曲線のさまざまな演算は、微分・積・次数上げ の組合せで「ベジエ関数の零点問題」として統一的に表せる。
次数は n(線分との交点)、n−1(極値・線分との最近点)、2n−3(変曲点)、2n−1(点との最近点・接線)、4n−6(曲率の極値)と演算によって増えるが、アルゴリズムは全く同じ。
距離関数の考え方:距離関数 = 0 → 交点 、距離関数の微分 = 0 → 最近点 、位置ベクトルと接線の外積 = 0 → 接線 。距離関数の最大・最小を使えば包含箱・包含円 も同じ枠組みで得られる。
凸包性により初期値不要・解の取りこぼしなし・高速収束 が保証される。
有理曲線は分子だけを解けばよく、エルミート曲線・Bスプライン・NURBS もベジエ形式に変換すれば同じ枠組みで処理できる(第2部へ)。
参考文献
T. Nishita, T. W. Sederberg, M. Kakimoto, "Ray tracing trimmed rational surface patches," ACM SIGGRAPH Computer Graphics, 1990.
T. W. Sederberg, T. Nishita, "Curve intersection using Bezier clipping," Computer-Aided Design, 1990.
T. Nishita, "Applications of Bezier clipping method and their java applets," Proceedings of SCCG, 1998.
西田友是, 「Bezier Clipping およびその計算機支援設計への応用」, 福山大学工学部紀要, Vol.13, 1991.
関連発表(本資料の内容に関する最近の発表)
西田,「距離関数を用いたNURBS曲線と線分の交差および最近距離の計算」,画像電子学会 年次大会 2024 ,長崎,2024年8月28日.
西田,中村,「距離曲線を利用したベジエ曲線・曲面の包含球の計算と交差判定」,映像情報メディア学会 研究会,映情学技報, vol.48, pp.280-283 ,2024年3月.
西田,「ベジエ曲線の距離関数を用いたベジエ曲線・曲面の包含球の計算法」,情報処理学会 第86回全国大会,7C-01 ,2024年3月.