Bスプライン曲面のBezier曲面分解デモ

6×4点の制御点を持つ3次Bスプライン曲面を3×1個の3次Bezier曲面に分解します。
2次元のノット挿入により、u方向とv方向それぞれで内部ノットの多重度を3にして分解します。
元のBスプライン曲面
制御点グリッド
分解後のBezier曲面
30°
20°

操作方法

分解結果

U方向: 6点 → 3個のBezier曲線セグメント

V方向: 4点 → 1個のBezier曲線セグメント

総計: 3×1 = 3個のBezier曲面パッチ

Prompt: 6x4点で構成されるBスプライン曲面をいくつかの3次Bezier曲面に分解するコードをhtmlとJavaScriptで書け。制御点はマウスドラッグで制御でき、見る方向は水平。垂直方向の回転はスライダーで指定できるように

理論的背景: n制御点のBスプライン曲線: (n-1)個のBezier曲線に分解 6×4制御点のBスプライン曲面: U方向: 6点 → 3セグメント V方向: 4点 → 1セグメント(内部ノットなし) 総計: 3×1 = 3個のBezier曲面パッチ

修正内容: 制御点インデックスの修正: ノット挿入後の制御点配列の正確な理解 各Bezierパッチの開始インデックスをseg * 3に修正 重複する制御点を考慮した正しいインデックス計算 より詳細なデバッグ情報: ノット挿入後の制御点数とノットベクトルを表示 各セグメントのU範囲を明確に表示 パッチの有効性チェックを強化 エラーハンドリングの改善: 無効な制御点の場合の適切な代替値設定 Bezier曲面評価時の詳細なエラーチェック パッチ構造の完全性検証 理論的背景: 2個の内部ノット(1/3, 2/3)をそれぞれ3回挿入 元の6制御点 + 挿入による6追加制御点 = 12制御点 3つのBezierセグメント:[0-3], [3-6], [6-9]の制御点を使用

修正のポイント: 正確な理論的理解: 6制御点のBスプライン → 3個のBezierセグメント 各内部ノット(1/3, 2/3)を3回挿入 最終的に12個の制御点で3つの4×4 Bezierパッチ 正しいパッチ抽出: パッチ1: インデックス [0-3] × [0-3] パッチ2: インデックス [3-6] × [0-3] パッチ3: インデックス [6-9] × [0-3] 隣接パッチは境界制御点を共有 詳細なデバッグ情報: 各制御点の座標を表示 パッチの四隅の座標を確認 ノット多重度の解析を追加 エラー処理の強化: 範囲外アクセスのチェック 無効な制御点の検出 詳細なログ出力 期待される結果: 3つの4×4 Bezier曲面パッチが正しく生成 各パッチが元のBスプライン曲面の一部を正確に表現 隣接パッチ間での連続性の保持