オフセット曲線とそのトリミング

1.オフセット曲線とは

曲線 C(t) の各点を、その点の法線方向に一定の距離 d だけ移動して得られる曲線をオフセット曲線といいます。

O(t) = C(t) ± d・N(t)   N(t):単位法線ベクトル

「輪郭から d だけ内側/外側に離れた線」を表すもので、CAD・CAM・作図の基本操作です。ところが、この式をそのまま計算しただけでは正しいオフセット曲線にならない場合があります。

問題:曲率半径より大きくオフセットすると破綻する

N(t) は曲線が曲がっている側の中心(曲率中心)を向いています。曲率半径を ρ(t) とすると、内側へ d だけオフセットしたとき、d > ρ(t) となる区間では移動先が曲率中心を通り越してしまいます。その結果、オフセット曲線は折り返してループ(自己交差)を作ります。

ループ(不正な部分) 単純にずらしただけ 交点で切断・接合 トリミング後
灰色=元の曲線、橙/緑=オフセット曲線、赤破線=捨てるべきループ部分

2.トリミングとは

この不正なループを自己交差点で切断して取り除き、残りをつなぎ直す処理を「トリミング(trimming)」と呼びます。

幾何学的に見ると、正しいオフセット曲線とは「元の曲線からの距離がちょうど d であり、かつ d より近い点を持たない」点の集合です。ループの内側に入り込んだ部分は、元の曲線からの距離が d より小さくなっているため、この条件を満たしません。したがってトリミングは「元の曲線から d 未満の距離にある区間を捨てる」操作と言い換えられます。

ループが生じる条件オフセット距離 d が、その付近の曲率半径 ρ(t) を上回るとき(内側オフセットの場合)。
境界のケースd = ρ(t) のとき、ループは潰れて尖点(カスプ)になる。κ(t) = 1/d を満たす t として検出できる。
トリミングの判定基準元の曲線からの最短距離が d より小さい区間は不正であるため除去する。

3.ベジエクリッピング法による処理手順

この処理は、ベジエクリッピング法の中でも特に自然な応用例です。必要な計算がすべて「ベジエ関数の零点を求める問題」に帰着するためです。

  1. オフセット曲線の近似 厳密なオフセット曲線は一般に有理式にならないため、まずベジエ曲線で近似する(必要に応じて分割して精度を上げる)。
  2. 自己交差点の検出 C(s) − C(t) = 0 を s < t の領域で解く。これは「曲線同士の交点」を同じ曲線に適用したもので、FAT Line によるクリッピングがそのまま使える。
  3. 尖点の検出 曲率 κ(t) の分子はベジエ関数になるので、κ(t) = 1/d となる t をクリッピングで求める。
  4. 区間の採否判定 交差点・尖点でパラメータを分割し、各区間から元の曲線への最短距離を求める。点と曲線の距離は 2n 次のベジエ関数、その微分は (2n−1) 次のベジエ関数になるので、その零点として最近点が求まる。距離が d より小さい区間は捨てる。
  5. 再結合 残った区間を交点で接合し、正しいオフセット曲線とする。

なぜベジエクリッピングが有利か

トリミングでは交差点をひとつでも見落とすと結果が破綻します(ループが残る、逆に必要な部分まで消える)。ニュートン法のような初期値依存の反復では、接近した2解や接触に近いケースで解を取りこぼす危険があります。ベジエクリッピング法は制御点の凸包性によって「この区間に解は存在しない」ことを保証しながら区間を狭めるため、解の取りこぼしが原理的に起こりません。CAD/CAM のように結果の正しさが加工精度に直結する場面では、この頑健性が決定的な利点になります。

4.応用分野