流体シミュレーション

| 85 | 0 |
マウスまたは指でドラッグして流体を動かしてください

※ パフォーマンスはデバイスにより異なります


📋 このツールを作ったプロンプト

以下のプロンプトをClaude・ChatGPT・GeminiなどのAIに貼り付けると、同じようなツールを作ることができます。

ブラウザで動く流体シミュレーションをHTML単一ファイル(HTML/CSS/JS完結)で実装してください。

【アルゴリズム】
Jos Stam の「Stable Fluids」論文に基づくグリッドベースの流体シミュレーションを実装する。
- グリッドサイズ N=100((N+2)×(N+2) の配列で境界を含む)
- 各セルに速度場 (vx, vy) と密度場 (r, g, b) を持つ
- 1ステップの処理: diffuse(ガウス=ザイデル反復)→ project(非圧縮性の保証)→ advect(バックワード移流)
- 境界条件: 速度は壁で反転(setBound)、密度は壁と同値

【インタラクション】
- マウス/タッチのドラッグ操作で、グリッド座標に変換した位置に速度と密度を加算する
- 前フレームとの差分を力として使用(差分×force定数)
- 半径1セルの周囲3×3に力・密度を分散して加える

【カラー】
- レインボーモード: フレームごとに hue を加算し HSL→RGB 変換でカラーを決定
- 単色モード: 赤・橙・緑・青・紫・白の6色スウォッチから選択可能
- モード切替ボタンと色スウォッチを横並びで表示する

【スライダー】
- 粘度(viscosity)と拡散(diffusion)をスライダーで 0〜99 の範囲で調整できる
- 値は Math.pow(10, -6 + v*0.04) でスケーリングし、0のときは正確に0とする

【描画】
- canvas に createImageData で直接ピクセル書き込みを行い requestAnimationFrame でループ
- グリッドセルをピクセルにマッピングして描画する
- canvas サイズは親要素幅に合わせてリサイズ対応する

【制約】
- 外部ライブラリ不使用
- グローバル汚染防止のため即時関数(IIFE)で全体を囲む
- HTML/CSS/JS をすべて1ファイルに収める