⚠ ローカルファイルとして開いています。Chromeのセキュリティ制限によりコンソール警告が出ますが動作に影響はありません。

ベジエ曲面 条件曲線抽出

F(u,v)=0 を UV 再分割で解く統一フレームワーク — 輪郭線/明暗境界線/抜き勾配の限界線/球との交線を同一コードで抽出
★ 形状選択
32パッチ / 290制御点
★ 条件関数 F(u,v)
球で曲面をトリムする操作に相当します。球を動かすと交線が滑らかに変化します。
★ ベジエクリッピング設定
0=パッチ単位のみ判定(粗い) 8=最大細分化(高精度・低速)
末端パッチ内をマーチングスクエアで細分(線分抽出)
凸包クリップを使う
OFF にすると単純4分割のみになり、判定ノード数の差が統計に現れます
表示設定
半透明曲面
曲面ワイヤ
抽出曲線 F=0
F の符号で色分け
パッチ境界線
線画モード
UV分割図(右下)
球を表示
統計
パッチ数
F の次数
判定ノード数
凸包で棄却
クリップで収縮
抽出線分数
計算時間
🖱 ドラッグ → 視点回転 🖱 ホイール → ズーム

ここで解いている問題はすべて同じ形です。
曲面上の条件を1つのスカラー2変数ベジエ関数 F(u,v) に表し、 その零集合を UV 領域の再分割で追い込んで線分列として出力する、というものです。

条件式が S(u,v) の多項式で書ければ、ベジエ関数の積の公式で係数を厳密に組み立てられます。 あとは 全係数が同符号なら解なし(凸包性による棄却)、 符号混在なら凸包クリップで UV 範囲を収縮、という手順が共通に使えます。 コード上は fieldCoefs() の中身を差し替えるだけです。

輪郭線は視点に依存するため回転のたびに再計算しますが、 抜き勾配・球との交線は視点に依存しないので、回転しても再計算は走りません。
視点: 左ドラッグ / ズーム: ホイール