/*
  2003/07/17 小松 研吾
*/
import java.applet.*;
import java.awt.*;

public class Magline0 extends Applet {
    public void paint(Graphics g) {
	// 表示域の周囲に四角形を描画する
	Dimension d = getSize();
	int width = d.width;
	int height = d.height;
	g.setColor(Color.blue);
	g.drawRect(0, 0, width - 1, height - 1);

	// 半径50pixelsの円を描画
	// 50pixels = 1 R(惑星半径)
	g.setColor(Color.blue);
	g.fillOval(-50, height - 50, 100, 100);

	double h = 0.1;
	double x, y, k1, k2, k3, k4, dy;
	int oldpltX, oldpltY, pltX, pltY;

	k1 = 0; k2 = 0; k3 = 0; k4 = 0; dy = 0;
	//	x = Math.cos((double)(5/12)*Math.PI);
	//	y = Math.sin((double)(5/12)*Math.PI);
	x = 1;
	y = 1;

	// Runge-Kutta法
	for(int j = 0; j < 6; ++j) {
	    oldpltX = (int)(x/h); oldpltY = height - (int)(y/h);
	    pltX = 10; pltY = height - 10;

	    for(int i = 0; i < width; i++) {
		k1 = h * f(x, y);
		k2 = h * f(x+h/2, y+k1/2);
		k3 = h * f(x+h/2, y+k2/2);
		k4 = h * f(x+h, y+k3);
		dy = (k1 + 2*k2 + 2*k3 + k4) / 6.0;
		y += dy;
		x += h;

		// データ値の曲線を描画する
		pltX += 1;
		pltY = height - (int)(y/h);
		g.setColor(Color.black);
		g.drawLine(oldpltX, oldpltY, pltX, pltY);
		oldpltX = pltX;
		oldpltY = pltY;

		if(y<=0)
		    break;
	    }
	    x = 1; y = 1 + (double)j;
	}
    }

    private double f(double x, double y) {
	double value = 0;
	value = (2*y*y - x*x) / (3*x*y);
	return value;
    }
}
