import java.applet.*;
import java.awt.*;
import java.lang.Math.*;
/*
  <applet code="planet" width=400 height=400>
  </applet>
*/
public class planet extends Applet
implements Runnable {
  
  Thread t;
  double ecli=0.5,el=1.;
  double theta=0.,rad;
  Image buffer;
  Graphics bufferg;

  public void init() {

    // スレッドを開始する
    t = new Thread(this);
    rad=el/(1.+ecli*Math.cos(theta)); 
    t.start();
    // バッファを作成する
    Dimension d = getSize();
    buffer = createImage(d.width, d.height);
  }

  public void run() {
    try {
      while(true) {
        // anglular velocity gets faster near the sun. Kepler's 2nd law.
        theta=theta+0.1/(rad*rad);
        // 再描画を要求する
        repaint();

        // ウィンドウを更新する前に休止する
        Thread.sleep(100);
      }
    }
    catch(Exception e) {
    }
  }

  public void update(Graphics g) {
    paint(g);
  }
  public void paint(Graphics g) {
    double scale=100.;
    int x,y;
    
    // バッファのグラフィックコンテキストを取得する
    if (bufferg == null)
      bufferg = buffer.getGraphics();

    // バッファを描画する
    Dimension d = getSize();
    bufferg.setColor(Color.white);
    bufferg.fillRect(0, 0, d.width, d.height);
    bufferg.setColor(Color.black);
    // this is eclipse. Kepler's 1st law.
    //ケプラーの第３法則はセメスター物理Iのp50.
    rad=el/(1.+ecli*Math.cos(theta));
//    if(theta> 2*3.141526){
//       theta=0.;
//    }
    x=(int)(scale*rad*Math.cos(theta));
    y=(int)(scale*rad*Math.sin(theta));
    bufferg.drawLine(190,200,210,200);
    bufferg.drawLine(200,190,200,210);
    bufferg.fillOval(x+200, y+200, 5, 5);

    // ウィンドウを更新する
    g.drawImage(buffer, 0, 0, this);

  }
}

