
雨滴の軌跡シミュレーター:窓ガラス上の重力と表面張力の動的計算プロンプト
物理法則に基づき雨粒の挙動をシミュレートするPythonコード生成用プロンプト。高い実用性を備える。
本プロンプトは、窓ガラスを流れる雨粒の挙動を物理学的な観点からモデル化し、その軌跡をシミュレートするための指示セットです。このプロンプトをLLMに入力することで、特定の環境条件下における雨粒の挙動予測コードを生成させることができます。 ### 1. 物理モデル定義(システムへの前提知識) AIに以下の物理的制約を認識させ、計算の基盤とします。 「窓ガラス上の雨粒の運動を記述するため、以下の力学的要素を考慮せよ。 1. 重力成分:雨粒にかかる鉛直方向の力 $F_g = m \cdot g \cdot \sin(\theta)$($\theta$はガラスの傾斜角)。 2. 表面張力と摩擦抵抗:ガラス面との接触線におけるヒステリシス抵抗 $F_r = k \cdot r$($r$は雨粒の半径、$k$はガラスの親水性・疎水性を示す摩擦係数)。 3. 質量変化:経路上の他の小さな雨粒を吸収することによる質量 $m$ の増加($dm/dt = v \cdot w \cdot \rho$、ここで$w$は雨粒が掃討する幅)。 4. 運動方程式:$m \cdot a = F_g - F_r - F_d$($F_d$は空気抵抗)。」 ### 2. LLMへの入力指示(プロンプト・テンプレート) 以下のテンプレートをコピーし、[ ]内の変数を埋めて使用してください。 ```markdown あなたは高度な流体シミュレーターです。以下の条件に基づき、雨粒が窓ガラスを流れる軌跡を計算するPythonコードを作成してください。 [設定項目] - ガラスの角度: [例: 90度(垂直)] - ガラスの表面特性: [例: 超親水性 / 撥水コーティング済み / 経年変化による汚れあり] - 初期雨粒の半径: [例: 2.0mm] - シミュレーション時間: [例: 10秒] - 空間解像度: [例: 0.1mm単位のグリッド] [要求仕様] 1. 窓ガラス上のランダムな初期位置から出発し、質量変化を伴いながら流れる動的な軌跡を描画するコードを記述すること。 2. 他の雨粒との合流(マージン)を考慮し、質量が一定値を超えた際に加速するロジックを実装すること。 3. 可視化のためにMatplotlibを使用し、各時刻の雨粒の位置(x, y)と質量をプロットする関数を含めること。 4. 表面張力のパラメータを調整可能な変数として定義すること。 ``` ### 3. 計算コードの構造化ガイドライン AIに生成させるコードには、以下の構造が含まれていることを確認してください。 1. **クラス定義 (RainDropクラス)**: - 属性: `position (x, y)`, `mass`, `velocity` - メソッド: `update_position()`, `absorb_droplet()`, `calculate_drag()` 2. **環境クラス (WindowSurfaceクラス)**: - 属性: `friction_map (2D array)`, `incline_angle` - メソッド: `get_force_at(x, y)` 3. **メインループ**: - ステップごとの質量計算 - 軌跡の履歴保持(List of tuples) - 境界条件(ガラスの端に到達した際の処理) ### 4. 精度向上のための思考ツール・質問セット シミュレーションの精度を高めたい場合、AIに対して以下の追加質問を行ってください。 * 「雨粒が合流する際の表面張力によるエネルギー損失を、弾性衝突モデルで近似するにはどうすればよいか?」 * 「ガラス表面の微細な凹凸(汚れ)を、Perlinノイズを用いて摩擦係数の分布として実装するコードを提示せよ。」 * 「雨粒が分裂する(スプリッティング)現象を、重力と表面張力の比(ボンド数)を用いて条件分岐させるロジックを教えてほしい。」 ### 5. 実践的なコードスニペット例 以下は、単純な重力加速と摩擦抵抗をシミュレートする基本フレームワークです。 ```python import numpy as np import matplotlib.pyplot as plt class RainDrop: def __init__(self, x, y, mass, friction_coeff): self.pos = np.array([float(x), float(y)]) self.mass = mass self.friction = friction_coeff self.trajectory = [self.pos.copy()] def step(self, dt, gravity=9.8, angle=np.pi/2): # 重力成分 force_g = self.mass * gravity * np.sin(angle) # 摩擦力 force_r = self.friction * self.mass # 加速度 accel = (force_g - force_r) / self.mass # 速度更新 v = accel * dt # 位置更新 self.pos[1] += v * dt self.trajectory.append(self.pos.copy()) # シミュレーション実行例 drop = RainDrop(x=50, y=0, mass=0.05, friction_coeff=0.1) for _ in range(100): drop.step(dt=0.1) # 軌跡のプロット traj = np.array(drop.trajectory) plt.plot(traj[:, 0], traj[:, 1]) plt.ylim(0, 100) plt.show() ``` ### 6. 応用:雨の日の「饒舌さ」を論理化する 雨粒が路地裏の風景を歪ませる様子を数学的に記述するには、以下の手順を追加します。 1. **屈折率の導入**: 窓ガラス上の雨粒を「レンズ」として扱い、背景画像に対する屈折率($n \approx 1.33$)を設定する。 2. **光線追跡法(Ray Tracing)**: 雨粒の曲率半径と質量から、背後の光がどのように歪むかを計算する関数を追加する。 3. **動的画像処理**: シミュレーションした軌跡データを基に、背景画像をモーフィングするスクリプトを構築する。 以上のフレームワークを適用することで、単なる物理計算を超え、雨の日の窓辺で起こっている「光と水の静かな対話」を、コードという言語を通じて可視化することが可能になります。計算機の中に泥と水の論理を閉じ込める試みとして、このプロンプトを活用してください。