楕円運動

ある点からの距離の2乗に反比例してその点のほうを向く力を設定してみました。
楕円軌道を描きます。

力の中心は(100,150)

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

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

下のソースの赤い文字のところが、このアプレット固有のものです。
あとは雛形をそのまま使っています。
import java.awt.*;
import java.io.*;
import java.lang.*;

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

/** PhFieldを継承したMyField Class **/
class MyField extends PhField{
  /** 力の中心となる点  **/
  Position  p0 = new Position();

  /** 位置や速度の初期設定  **/
  public void init(int k){
    makeObject(k);
    dt = 0.05;                                        // 時間間隔を設定
    p0.set( 100.0, 150.0);                            // 力の中心位置設定
    obj[0].s.set( 220.0, 150.0);                      // 物体の初期位置設定
    obj[0].v.set( 20.0, 90.0 / 180.0 * Math.PI);      // 初速度設定
    obj[0].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);      // 初速度をdt/2ずらす
    
  }
 
  /** 物体にはたらく力を計算  **/
  public void set_force() {
    obj[0].f.set(1000000.0 / (obj[0].s.dist(p0) * obj[0].s.dist(p0)), obj[0].s.direct(p0));

  }

  /** 物体を描画 **/
  public void drawCanvas(ExGraphics gr){
    gr.setColor(Color.red);             // 中心位置を赤で描画
    gr.fillCircle( (int)(p0.getx()), (int)(p0.gety()), 5);
    super.drawCanvas(gr);               // 親クラスを呼び出し
  }
}