▍AI Dev Lab
StarTrail

重力で近くを通る2粒子を観察する:スロー再生と計算刻みの違い

初期座標・速度・G・dt・軟化を公開した2粒子の数値実験。保存点の最接近をコマ送りで見て、再生速度・表示径・計算刻みを区別します。条件付きPNG/JSONの保存手順と、接触や現実の精度を保証しない限界も説明。

#近づくことと、ぶつかることは違う

StarTrailの重力シミュレーターで、2つの粒子が近くを通る例を観察します。使うのはアプリ内の「固定2粒子の近接例」。現実の天体の測定値ではなく、条件を公開した小さな数値実験です。

このモデルには接触・合体・跳ね返りの処理がありません。画面の丸が重なった場合も、それだけで衝突したとはいえません。まずは「同じ計算結果を遅く見ること」と「計算そのものを変えること」を分けて試してみてください。

#最初の条件

条件値
粒子数2
重力定数 G0.2
計算刻み dt0.004
軟化 ε0.02
保存する更新回数200
保存点初期状態0を含む201点
質量両方とも1
粒子1の初期位置x=-0.4、y=0.08
粒子1の初期速度vx=0.7、vy=0
粒子2の初期位置x=0.4、y=-0.08
粒子2の初期速度vx=-0.7、vy=0

位置・質量・時刻はモデル内の値で、km・kg・秒への換算は定義していません。乱数は使わず、初期座標を直接指定しています。表示用の点径は各4ピクセルですが、重力や接触を計算する半径ではありません。

加速度は、各ペアの座標差に対して G × 相手の質量 / (距離² + ε²)^(3/2) を掛けて求めます。加速度の蓄積はFloat32配列、位置と速度はJavaScriptの数値です。速度を先に v += a × dt で更新し、その更新済み速度で x += v × dt を計算します。Velocity Verlet法ではありません。

#同じ保存点をゆっくり見る

  1. StarTrailで「固定2粒子の近接例を開く」を押します。
  2. 「保存点内の最接近へ」を押し、選択される保存点と距離を読みます。
  3. 「1点戻る」「1点進む」で前後を比較します。
  4. 再生速度を5・10・30保存点/実秒の目安へ切り替えます。
  5. 粒子の表示径、位置の表示範囲と1・2・4倍の表示倍率も切り替えます。

再生速度は、すでに計算した配列を読む速さです。変更しても、初期条件・計算刻み・201保存点の位置と速度は変わりません。表示径も軌跡へ影響しません。表示範囲を変えた場合は、同じモデル座標が別の画面倍率で描かれます。

dtを変えてもう一度計算する操作は、これとは別です。dtは位置や速度の更新に使うため、軌跡や保存するモデル時刻そのものが変わります。小さいdtへ変更することを「同じ軌跡のスロー再生」とは呼びません。

#この実行で観察したこと

この実装で上の条件を200回進めると、保存点内の最小距離は保存点119、モデル時刻0.476、距離約0.061381でした。初期状態を0番として数えています。単体検査では距離を 0.06138097944288283 と確認しています。

これは保存した201点から選んだ最小値です。点と点の間の連続的な最接近を解いた値ではなく、真の軌道の正確な最接近時刻でもありません。また、距離が小さいことだけで「衝突」「合体」「重力アシストの成立」と判定してはいません。最後まで粒子数と質量はそのままです。

近接のしきい値0.1は、観察する範囲を選ぶための目安です。力や表示径は変えず、「保存点の距離がこの値以下か」だけを数えます。しきい値を変えても同じ軌跡が残ることを確認してください。

#条件ごと保存する

「初期条件・全保存点をJSON保存」には、初期座標と速度、質量・表示属性、G・dt・ε、全保存点の位置/速度、選択した2粒子、表示範囲、しきい値、手書きメモが含まれます。「この保存点を条件付きPNG保存」は、その時点の図と条件を1枚にします。

自由操作から記録する場合も、開始時点の全粒子を複製して200回進めます。記録は最大120粒子で、超える場合は粒子を勝手に間引かず記録を止めます。自由操作の未記録の過去まで巻き戻せる機能ではありません。自由操作へ戻ると、記録を始めた元の状態が停止したまま残っています。

#この例で証明していないこと

現実の天体の軌道精度、エネルギーの厳密な保存、長時間の安定性、物体の接触や合体を検証する実験ではありません。軟化や有限の刻み、丸めに依存するモデルの観察です。異なる実行環境で最後の桁まで一致する保証もありません。保存した条件を残して、何を変えた比較なのかが追える形で利用してください。

[ ./next_action ]

読んだら、 StarTrail を実際に動かす。

この開発ログは StarTrail をどう作ったかの記録です。 読み終わったらそのままサービス本体へ戻って、実物で価値を確かめてください。

[ ./related_logs ]

関連する開発ログ

all logs →
ShadowTwin

立体パズルの別解を作る:同じ影と最少の積み木

ShadowTwinの開発記録。同じ3方向の影となる別解の仕組みを、A/Bの違いと1操作の投影変化で確認。最高段の維持・床の有無・最少個数を区別し、元判定と保存を変えず検算します。実照明の計算や能力診断ではありません。

read log →
SlitCard

スリットアニメーションを作る:4コマの合成と透明原稿の設計

SlitCardの開発記録。4コマの帯を交互に合成し、すき間と黒帯で別のコマを見せる仕組みを解説。同縮尺の台紙・透明シートSVG、50mm確認線、手動プレビュー・初期非表示、再編集と実出力検査を整理します。

read log →
WindowLight

日当たりシミュレーションを作る:窓の光を床へ投影する幾何モデル

WindowLightの開発記録。太陽位置近似から窓の4隅を床へ投影し、凸多角形を部屋で切り取る設計を解説。国立天文台の16時刻との限定照合、大気差・低高度・実際の採光との違い、SVGと設定の再編集を整理します。

read log →
GridLights

電源構成の比較を作る:割合と実量を100個の電球で読み解く

電源構成比較GridLightsの開発記録。12か国の年次発電データを最大剰余法で100個の電球に変換し、割合とTWhを比較する設計を解説。欠損を0補完しない7分類、予想と実値、出典付きSVGと実データ検証を整理します。

read log →
SoundLoom

音のお絵かきを作る:実WAVから絵を測り直す設計

音のお絵かきの開発記録。描画と編集可能な立ち上がり・消え方をPCM/WAVへ変換し、実音をGoertzel法で測る仕組みを解説。旧JSONの音の互換性、再生音量と保存ピーク、測定窓・量子化の限界と古い処理の抑止を整理します。

read log →
MazeLoom

宝探し迷路を作る:寄り道まで含めた最短ルートの探索

宝探し迷路の開発記録。通路を木として生成し、現在地と3つの宝の取得状態を組み合わせて最短ルートを探す仕組みを解説。問題コードの版固定、画面と解答付きPDFの一致、手数と印刷の検証を整理します。

read log →