/* ============================================================ //

// 以下のタグの間に，学籍番号と氏名を記してください．
<ID>M0103202</ID><NAME>櫻井 大祐</NAME>

// 以下のタグの間に，タイトルを記してください．
<TITLE>  </TITLE>

// 以下のタグの間に，“企画”を200〜400字程度で記してください．
<DESCRIPTION>


</DESCRIPTION>

// ============================================================ */

//
// プログラム２のソースコード （提出用）
//
import jp.ac.teu.media.*;

public class M010320212 extends TMLib {
	final static int vsize = 480;

	public static void main(String [] args) {
		begin(new M010320212(), vsize, vsize);
	}

	// 2点間の長さを求めるメソッド （追加）
	public double getLength(int x, int y, int ox, int oy){
		return Math.sqrt((double)((x - ox)*(x - ox) + (y - oy)*(y - oy)));
	}

	// 中心点(ox, oy)に対する角度（ラジアン）を求めるメソッド （追加）
	public double getRadian(int x, int y, int ox, int oy){
		double r = getLength(x, y, ox, oy);
		double s = Math.asin((double)(y - oy)/r);
		double c = Math.acos((double)(x - ox)/r);
		double p = Math.PI/2.0;
		if( 0<=s&&s<=p && 0<=c&&c<=p ) return s;
		else if( 0<=s&&s<=p && p<=c&&c<=2.0*p ) return c;
		else if( -p<=s&&s<=0 && p<=c&&c<=2.0*p ) return 2.0*p - s;
		else if( -p<=s&&s<=0 && 0<=c&&c<=p ) return 4.0*p - c;
		else return 0.0;
	}

	public void Main() {
		int x, y, R, G, B;
		double X, sX, wX, dX, Y, sY, wY, dY, Z1, Z2, Z3;
		TMLibImage	img = new TMLibImage();
		img.newImage(vsize, vsize);

		// *** BEGIN WINDOW *** //

		sX = -100.0;
		sY = -100.0;
		wX = 200.0;
		wY = wX;

		// *** END WINDOW *** //

		dX = wX/(double)vsize;
		dY = wY/(double)vsize;

		for(x = 0; x < vsize; x++){
			X = sX + dX * (double)x;

			for(y = 0; y < vsize; y++){
				Y = sY + dY * (double)y;

				// *** BEGIN YOUR PROGRAM *** //

		if((x-240)*(x-240) + (y-240)*(y-240) <=100)
		{
		R = (int)Math.abs(256/(X*Y));
		G = 0;
		B = 0;
		}
		else{
                Z1 = ((X*X + Y*Y) / 20);
                Z2 = (Math.abs(X*X/Y))+(Math.abs(Y*Y/X));
                Z3 = Math.abs(X*X/Y*Y);

				R = (int)Z2 % 256;
				G = (int)Z3 % 100;
				B = (int)Z1 % 250;
		}
				// *** END YOUR PROGRAM *** //

				img.setRGB(x, y, R, G, B);
			}
		}

		drawImage(0, 0, img);
		img.writeImage("M0103202_2.bmp");
	}
}
