ユーザ用ツール

サイト用ツール


ruby:rbcanvas-gravity

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
ruby:rbcanvas-gravity [2025/05/24 02:53] – [rbCanvas プログラム] youruby:rbcanvas-gravity [2025/06/14 05:57] (現在) – [rbCanvas プログラム] yuki
行 68: 行 68:
 def ay(x, y) return - MU * y / r(x, y) ** 3 end def ay(x, y) return - MU * y / r(x, y) ** 3 end
    
-kukv, kx, ky の計算 +kvxkvy, kx, ky の計算 
-def calc_k(uv, x, y, dudv, dx, dy)+def calc_k(vxvy, x, y, dvxdvy, dx, dy)
   return ax(x + dx, y + dy) * $dt,   return ax(x + dx, y + dy) * $dt,
          ay(x + dx, y + dy) * $dt,          ay(x + dx, y + dy) * $dt,
-         (du) * $dt, +         (vx dvx) * $dt, 
-         (dv) * $dt+         (vy dvy) * $dt
 end end
    
-# ルンゲ=クッタ法で $dt 後の (x,y) と (u,v) を求める +# ルンゲ=クッタ法で $dt 後の (x,y) と (vx,vy) を求める 
-def next_step(uv, x, y) +def next_step(vxvy, x, y) 
-  ku1kv1, kx1, ky1 = calc_k(uv, x, y, 0, 0, 0, 0) +  kvx1kvy1, kx1, ky1 = calc_k(vxvy, x, y, 0, 0, 0, 0) 
-  ku2kv2, kx2, ky2 = calc_k(uv, x, y, +  kvx2kvy2, kx2, ky2 = calc_k(vxvy, x, y, 
-                              ku1 * 0.5, kv1 * 0.5, kx1 * 0.5, ky1 * 0.5) +                                kvx1 * 0.5, kvy1 * 0.5, kx1 * 0.5, ky1 * 0.5) 
-  ku3kv3, kx3, ky3 = calc_k(uv, x, y, +  kvx3kvy3, kx3, ky3 = calc_k(vxvy, x, y, 
-                              ku2 * 0.5, kv2 * 0.5, kx2 * 0.5, ky2 * 0.5) +                                kvx2 * 0.5, kvy2 * 0.5, kx2 * 0.5, ky2 * 0.5) 
-  ku4kv4, kx4, ky4 = calc_k(uv, x, y, ku3kv3, kx3, ky3) +  kvx4kvy4, kx4, ky4 = calc_k(vxvy, x, y, kvx3kvy3, kx3, ky3) 
-  return + (ku1 + 2 * ku2 + 2 * ku3 ku4) / 6.0, +  return vx + (kvx1 + 2 * kvx2 + 2 * kvx3 kvx4) / 6.0, 
-         + (kv1 + 2 * kv2 + 2 * kv3 kv4) / 6.0, +         vy + (kvy1 + 2 * kvy2 + 2 * kvy3 kvy4) / 6.0, 
-         x + (kx1 + 2 * kx2 + 2 * kx3 + kx4) / 6.0, +          + (kx1 + 2 * kx2 + 2 * kx3 + kx4) / 6.0, 
-         y + (ky1 + 2 * ky2 + 2 * ky3 + ky4) / 6.0+          + (ky1 + 2 * ky2 + 2 * ky3 + ky4) / 6.0
 end end
  
行 176: 行 176:
     # 地球に衝突ならストップ     # 地球に衝突ならストップ
     if r(x, y) < RE     if r(x, y) < RE
-      flight =false+      flight = false
     end     end
   end   end
ruby/rbcanvas-gravity.txt · 最終更新: 2025/06/14 05:57 by yuki