三角形メッシュベジエ曲面と曲線の衝突ペナルティ法

表示設定
ペナルティ法設定
カメラ制御

3次ベジエ曲線を1つのセグメントに変更し、曲面の制御点をマウスドラッグで変更できるように修正します。修正が完了しました!主な変更点: ## 変更内容 **3次ベジエ曲線の簡素化**: - 複数セグメントの折れ線から単一の3次ベジエ曲線に変更 - 4つの制御点で1本の滑らかな曲線を定義 **マウスドラッグ機能追加**: - 曲面の制御点(緑色)をマウスでドラッグして移動可能 - ドラッグ中はカーソルが変化 - ホバー時にポインターカーソル表示 **インタラクション制御**: - アニメーション中はドラッグ無効 - リアルタイムで曲面形状が更新され、衝突判定も連動 **操作方法**: 1. 緑色の曲面制御点にマウスを近づけるとカーソルが変化 2. ドラッグして制御点を移動すると曲面形状がリアルタイム更新 3. 曲線との衝突判定とペナルティ法も即座に反映 これで曲面をインタラクティブに変形させながら、ペナルティ法による衝突回避の動作を確認できます。曲面を曲線に近づけると黄色の衝突点とオレンジの力ベクトルが表示されます。

## 主な機能(続き) **ペナルティ法実装**: - 曲線の制御点と曲面間の距離を計算 - 設定閾値以下で衝突判定 - ペナルティ係数に応じた反発力を生成 - リアルタイムで制御点位置を調整 **可視化機能**: - 曲面: 青色の三角形メッシュ - 曲線: 赤色の3次ベジエ曲線 - 制御点: 緑(曲面)、紫(曲線) - 衝突点: 黄色(曲線上)、オレンジ(曲面上) - ペナルティ力: オレンジの矢印ベクトル **インタラクティブ制御**: - 表示要素の個別ON/OFF切り替え - ペナルティ係数と判定閾値の調整 - 3Dビューのリアルタイム回転・ズーム - アニメーションによる動的な衝突シミュレーション **技術的特徴**: - ベルンシュタイン基底関数による正確なベジエ演算 - グリッドサーチによる曲面上最近点探索 - 数値積分によるペナルティ力適用 - リアルタイム3D投影変換 このシステムにより、ベジエ幾何学における衝突回避の動作を視覚的に理解できます。アニメーションを開始すると、曲線が曲面に近づく際にペナルティ法が働いて反発する様子が確認できます。

ペナルティ法で使用している主要パラメータの意味と機能について説明します。 ## ペナルティ法の主要パラメータ ### 1. **ペナルティ係数 (Penalty Strength)** - **現在の設定**: 100-10000 (デフォルト: 1000) - **意味**: 衝突時に発生する反発力の強さ - **機能**: - 値が大きいほど強い反発力が発生 - 物理的には「ばね定数」に相当 - 衝突回避の応答速度を制御 **数式**: `F = k × δ × n` - k: ペナルティ係数 - δ: 侵入量 (penetration depth) - n: 反発方向の単位ベクトル ### 2. **判定閾値 (Collision Threshold)** - **現在の設定**: 0.1-2.0 (デフォルト: 0.5) - **意味**: 衝突と判定する距離の境界 - **機能**: - この距離以下で衝突と判定 - 「安全マージン」の役割 - 早期警告システムとして機能 ### 3. **減衰係数 (Damping)** - **現在の設定**: 0.001 (コード内で固定) - **意味**: 力の適用時の時間積分ステップ - **機能**: - 数値的安定性を保つ - 振動やオーバーシュートを防ぐ - 実装上は dt (時間刻み幅) に相当 ## パラメータ間の相互作用 ### **ペナルティ係数と閾値の関係** ``` 侵入量 = max(0, 閾値 - 実際の距離) 反発力 = ペナルティ係数 × 侵入量 ``` ### **調整の指針** 1. **ペナルティ係数が小さい場合**: - 柔らかい反発(ゆっくりした回避) - 貫通が起こりやすい - 計算は安定 2. **ペナルティ係数が大きい場合**: - 硬い反発(素早い回避) - 振動や不安定性が発生しやすい - より現実的な剛体衝突 3. **閾値が小さい場合**: - ギリギリまで近づいてから反発 - 計算精度が重要 - 貫通リスクが高い 4. **閾値が大きい場合**: - 早めに反発開始 - 安全だが不自然な動作 - 計算負荷軽減 ## 実装上の特徴 このコードでは**静的ペナルティ法**を使用しており: - 制御点位置を直接修正 - 質量や慣性は考慮しない - リアルタイム対話に適した簡単な実装 より高度な実装では、質量、速度、加速度を考慮した**動的ペナルティ法**も可能です。