2物体の運動

2つの物体が引力で引き合う力を設定してみました。
本当は、ずれずに同じところを回らないといけないのですが・・・
原因はわかっているのですが、エレガントな解決法を模索中です。

物体1の初期条件
 位置は (220,150)
 初速度は
   大きさ 10m/s
   向き  90°の方向
 質量   10kg

物体2の初期条件
 位置は (80,150)
 初速度は
   大きさ 10m/s
   向き  -90°の方向
 質量   10kg

サンプルのソース
サンプルのドキュメント

下のソースの赤い文字のところが、このアプレット固有の部分です。
物体が2つになったために2つめの物体についての記述が追加されています。
import java.awt.*;
import java.io.*;
import java.lang.*;

/**
 * PhObject のサンプルアプレット
 *   2物体の運動
 */
public class Test2 extends java.applet.Applet {
  /** シミュレーション用の物理空間  **/
  MyField2 workField = new MyField2();
  
  public void init(){
    setLayout(new BorderLayout());
    add("Center",workField);
    workField.set_sleepTime(5); // 描画の時間間隔を0.01sに設定。
    workField.init(2);            // 初期設定(物体は2個)
  }
  
  public void start(){
    workField.start();           // アニメーション開始
  }
}

class MyField2 extends PhField{

  public void init(int k){
    makeObject(k);
    dt = 0.05;
    obj[0].s.set( 220.0, 150.0);
    obj[0].v.set( 10.0, 90.0 / 180.0 * Math.PI);
    obj[0].set_m( 10.0);

    obj[1].s.set( 80.0, 150.0);
    obj[1].v.set( 10.0, -90.0 / 180.0 * Math.PI);
    obj[1].set_m( 10.0);
    set_force();
    obj[0].a.set_acc( obj[0].get_f(), obj[0].get_m());
    obj[0].v.add_vel( obj[0].get_a(), - dt / 2);
    obj[1].a.set_acc( obj[1].get_f(), obj[1].get_m());
    obj[1].v.add_vel( obj[1].get_a(), - dt / 2);
  }
 
  public void set_force() {
    obj[0].f.set(1000000.0 /(obj[0].s.dist(obj[1].s) * obj[0].s.dist(obj[1].s))
                  , obj[0].s.direct(obj[1].s));
    obj[1].f.set(1000000.0 /(obj[1].s.dist(obj[0].s) * obj[1].s.dist(obj[0].s))
                  , obj[1].s.direct(obj[0].s));
  }
}