軌道ゲームで重力を2倍にしたら、どんな軌道が可能になるか
遊びを見つける執筆にClaudeを使用しています。

発射角度と初速を決めて、星の引力で曲がる軌道をゲートに通すゲームがあります。アソバースの公式作品「小さな軌道」もその一つです。星の重力が今の2倍になったら、ゲートに届く角度と初速の組み合わせは増えるのでしょうか。減るのでしょうか。それとも、初速の目盛りを読み替えるだけで同じ問題に戻るのでしょうか。 この記事は、その答えを読む前に自分の手で出すための実験の設計書です。重力の値だけを変えた簡易シミュレーターを短いコードで作り、「どの角度・どの初速ならゲートに入るか」を重力1倍と2倍で並べて比べます。結果は書きません。見るのは、到達できる場所がどう動くかという一点です。 なお、公式作品の内部の計算式や重力の値は、確認済みの情報にありません。そのためこの記事では作品本体には触れず、「引力で曲がる軌道」という同じ発想の自作版で実験します。自作版の結果が公式作品の挙動と同じとは限りません。公式作品との照らし合わせは、最後に作品を開いて行います。
実験の前に立てる予想
先に、物理から導ける予想を一つ立てておきます。これは結果ではなく、あとで自分の記録と突き合わせる仮説です。
ニュートンの万有引力では、星から距離 r の位置の加速度は G×M÷r² で決まります(G は重力の強さ、M は星の質量)。円軌道に乗る速さは √(GM÷r)、星から飛び去れる脱出速度は √(2GM÷r) です。どちらも G を2倍にすると約1.41倍(√2倍)になります。
ここから次の予想が立ちます。重力を2倍にして、初速も約1.41倍にすれば、軌道の形は元と同じになり、経過時間だけが約0.71倍(1÷√2)に縮むはずです。この予想が正しければ、重力2倍の世界は「初速の目盛りが√2倍に伸びただけ」の世界になります。
ただし、ゲームには初速の上限があります。同じ形の軌道を作るのに必要な初速が1.41倍になると、上限の中では届かなくなる軌道が出てくるはずです。逆に、上限の範囲に収まる範囲で見ると、遠回りの軌道や星に落ちやすい軌道の分布が変わるはずです。この「上限があるから形が同じでも到達できる範囲は変わる」という点が、実験の中心の問いです。
準備するもの:50行足らずの簡易シミュレーター
必要なのはブラウザとテキストエディタだけです。次のコードを orbit.html として保存し、ブラウザで開いてください。外部ライブラリもサーバーも使いません。
<pre id="out"></pre>
<script>
const M=1, start={x:-3,y:0}, gate={x:3,y:2,r:0.4};
const dt=0.01, tmax=30, starR=0.5;
// 1回の発射:ゲートに入れば1、それ以外は0
function fly(G,ang,v){
let x=start.x, y=start.y;
let vx=v*Math.cos(ang), vy=v*Math.sin(ang);
for(let t=0;t<tmax;t+=dt){
const r=Math.hypot(x,y);
if(r<starR||r>20) return 0; // 星に衝突、または遠く離れた
const a=G*M/(r*r*r);
vx-=a*x*dt; vy-=a*y*dt;
x+=vx*dt; y+=vy*dt;
if(Math.hypot(x-gate.x,y-gate.y)<gate.r) return 1;
}
return 0;
}
// 初速0.2〜2.0を縦、角度-180〜174度(6度刻み)を横に並べる
function grid(G){
let rows=[], count=0;
for(let i=10;i>=1;i--){
const v=i*0.2;
let row=v.toFixed(1).padStart(4)+" ";
for(let a=-180;a<180;a+=6){
const hit=fly(G,a*Math.PI/180,v);
count+=hit; row+=hit?"#":".";
}
rows.push(row);
}
return rows.join("\n")+"\n到達数 "+count;
}
out.textContent="G=1\n"+grid(1)+"\n\nG=2\n"+grid(2);
// 予想の確認:G=2で初速を√2倍にすると、G=1と同じ結果か
let same=0,total=0;
for(let i=1;i<=10;i++)for(let a=-180;a<180;a+=6){
const v=i*0.2, r=a*Math.PI/180;
total++; if(fly(1,r,v)===fly(2,r,v*Math.SQRT2)) same++;
}
out.textContent+="\n\n相似の一致 "+same+"/"+total;
</script>画面には、縦軸が初速、横軸が発射角度の文字の表が2つ出ます。# がゲートに入った組み合わせ、. が入らなかった組み合わせです。その下に、予想を確かめる一致数が出ます。
設定の意味は次のとおりです。
- 星は原点にあり、発射位置は左(-3, 0)、ゲートは右上(3, 2)で半径0.4です。星とゲートを結ぶ直線は星から離れて通るので、直進に近い軌道でも星に当たりません。
- 星の半径は0.5で、そこに入ったら衝突として失敗にします。
- 初速は0.2〜2.0の10段階です。この上限(2.0)がゲームの「初速の上限」に相当します。
数値の単位は、この試作の中で閉じた任意の単位です。現実の距離や速度とは対応しません。
手順と記録の取り方
実験は4段階で進めます。
- そのまま実行する。 G=1 と G=2 の表を見比べます。まず、# が増えたか減ったかだけを眺めます。ここでは解釈を急がず、目で見た印象を一行メモします。
- 数字で記録する。 次の項目を、G=1 と G=2 それぞれで書き出します。
- 到達数(# の総数)
- ゲートに入る最小の初速(# がある一番下の行の初速)
- 初速ごとの # の個数(行ごとの数)
- 連続する # の幅(ゲートを狙える角度の幅。6度刻みなので「何マス分」で数えます)
- 条件を一つずつ変える。 変える項目は1回に一つだけにします。次のとおり3種類を試します。
- 星の位置はそのままで、G を 1、1.5、2、3 にして到達数を並べます。
- ゲート位置を(3, 2)から別の場所に動かします。星の裏側(例:(3, -0.5)付近)のように、直進では星をまたぐ位置も入れます。
- 角度の刻みを6度から3度に細かくします。刻みが粗いと、細い成功の帯を見逃します。
- 予想を確かめる。 最後に出る「相似の一致」を読みます。一致しなかった組み合わせは、どの初速・角度なのかを書き出します。
記録は、次のような表にまとめると比べやすくなります。
- 1、到達数:、最小の初速:、最も狙いやすい行の # 数:、備考:
- 2、到達数:、最小の初速:、最も狙いやすい行の # 数:、備考:
条件を変えるたびに行を足します。同じ設定を2回走らせて同じ数字になることも確かめてください。この試作は乱数を使わないので、同じ設定なら毎回同じ表になるはずです。違っていたら、コードの書き写しミスを疑います。
結果の読み方
出た表は、次の順で判断します。
到達数が増えたか。 増えたなら、重力が強いほど曲がり方が大きく、ゲートに向かう経路が広がったと読めます。減ったなら、星に落ちる軌道や曲がりすぎる軌道が増えた可能性があります。どちらの場合も、# と . の分布が表のどこにあるかを見て理由を考えます。
# の場所が表の上下にずれたか。 予想どおりなら、G=2 の # は G=1 より高い初速の側に動きます。脱出速度や円軌道の速さが約1.41倍になるからです。上限(2.0)の近くで # が途切れているなら、上限が境目になって届かない軌道があると読めます。
相似の一致がどうなったか。 一致数が全体に近ければ、「重力2倍=初速の目盛りが√2倍」という予想は、この試作の範囲で支持されます。一致しない組み合わせが残る場合は、次の2つを疑います。
- 計算の刻み(dt)が粗いために誤差が出た。dt を 0.005 にして一致数が変わるかを見ます。
- 打ち切り時間(tmax)の影響。同じ形の軌道は G=2 だと約0.71倍の時間で進むので、tmax が同じなら G=2 のほうが余分に長く飛ぶことになります。周回したあと、あとからゲートに入る場合は、一致しなくなることがあります。
dt を変えても一致数が変わらない組み合わせは、刻みの誤差ではなく、時間の打ち切りや形の違いが原因だと考えられます。逆に、刻みを細かくすると一致数が変わるなら、元の差は誤差の側に原因があります。
ゲート位置を変えたとき。 星の裏側にゲートを置くと、直進では届かず、星を回り込むような軌道が必要になります。このとき # が表のどこに現れるかを G=1 と G=2 で見ます。重力が強いほど回り込みが急になると予想できるので、必要な角度のずれが変わるかを確かめてください。
起こりやすい誤り
実験を壊しやすい点を挙げておきます。
- 条件を同時に2つ変える。 G と初速上限を一緒に変えると、どちらの効果か分かりません。1回に変えるのは一つです。
- 刻みの粗さを結果と取り違える。 角度6度刻みでは、細い成功の帯が見えないことがあります。到達数の増減が小さいときは、3度刻みでも確認してください。
- dt を大きくしすぎる。 星のすぐ近くを通る軌道は、刻みが大きいと実際より大きくずれます。dt を半分にして結果が大きく変わるなら、その行は信頼しません。
- 星の衝突判定を忘れる。 半径0.5より内側に入った軌道を失敗にしているので、この値を変えると到達数が大きく動きます。変えたら必ず記録に残します。
- 相似の一致を完全一致だけで判断する。 刻みや時間の打ち切りの影響で、少数の不一致は起こりえます。数と場所の両方を見て判断します。
- 自作版の結果を公式作品にそのまま当てはめる。 公式作品の計算式や仕様は、この記事では確認できません。自作版で見えたのは「この式のもとでの傾向」です。
次の行動
まず orbit.html を作り、G=1 と G=2 の表を並べて、到達数と最小の初速を記録してください。そのうえで、アソバースの「小さな軌道」を開き、3つの星系それぞれで点線の全軌道予測と前回の軌道を見比べます。ゲートに届く角度や初速の幅が星系ごとにどう違うかを観察すると、自作版の表の読み方が確かめやすくなります。予測の点線を消して挑んだときの「勘」と、試作の表を見比べるのも一つの方法です。

