import java.applet.*;
import java.awt.*;

import java.awt.event.*;
import java.io.*;
import java.util.Vector;

public class m0104352_uzusio extends Applet {

	miCanvas mc;
   	Panel pnl_1;
   	Panel pnl_2 = new Panel ();
	Panel pnl_3 = new Panel ();
	Panel pnl_4 = new Panel ();
	Panel pnl_5 = new Panel ();

	Label lbl_1 = new Label ("渦の色");
	Label lbl_2 = new Label ("渦の形（１や４５、５０が形として良い）");
	Label lbl_3 = new Label ("渦の数（１〜２３）");
	Label lbl_4 = new Label ("回転");

	TextField tf_katati = new TextField ("50");
	TextField tf_kazu = new TextField ("1");

	Choice color = new Choice ();

	Button boton_katati = new Button ("OK");
	Button boton_kazu = new Button ("OK");
   	Button boton_giros = new Button ("OK");

    double nk = Integer.parseInt(tf_katati.getText());
    int nn = Integer.parseInt(tf_kazu.getText());

	int[] xpts = new int[1001];
	int[] ypts = new int[1001];
	int[] xpts2 = new int[1001];
	int[] ypts2 = new int[1001];
	int[] xpts3 = new int[1001];
	int[] ypts3 = new int[1001];
	int[] xpts4 = new int[1001];
	int[] ypts4 = new int[1001];
	int[] xpts5 = new int[1001];
	int[] ypts5 = new int[1001];
	int[] xpts6 = new int[1001];
	int[] ypts6 = new int[1001];
	int[] xpts7 = new int[1001];
	int[] ypts7 = new int[1001];
	int[] xpts8 = new int[1001];
	int[] ypts8 = new int[1001];
	int[] xpts9 = new int[1001];
	int[] ypts9 = new int[1001];
	int[] xpts10 = new int[1001];
	int[] ypts10 = new int[1001];
	int[] xpts11 = new int[1001];
	int[] ypts11 = new int[1001];
	int[] xpts12 = new int[1001];
	int[] ypts12 = new int[1001];
	int[] xpts13 = new int[1001];
	int[] ypts13 = new int[1001];
	int[] xpts14 = new int[1001];
	int[] ypts14 = new int[1001];
	int[] xpts15 = new int[1001];
	int[] ypts15 = new int[1001];
	int[] xpts16 = new int[1001];
	int[] ypts16 = new int[1001];
	int[] xpts17 = new int[1001];
	int[] ypts17 = new int[1001];
	int[] xpts18 = new int[1001];
	int[] ypts18 = new int[1001];
	int[] xpts19 = new int[1001];
	int[] ypts19 = new int[1001];
	int[] xpts20 = new int[1001];
	int[] ypts20 = new int[1001];
	int[] xpts21 = new int[1001];
	int[] ypts21 = new int[1001];
	int[] xpts22 = new int[1001];
	int[] ypts22 = new int[1001];
	int[] xpts23 = new int[1001];
	int[] ypts23 = new int[1001];

   	public void init() {
		setBackground (new Color(0, 120, 255));
		setLayout (new BorderLayout ());

		add ("Center", mc = new miCanvas ());
		add ("North", pnl_1 = new Panel ());
		pnl_1.setBackground (Color.orange);
		pnl_1.setLayout (new GridLayout (2,3));

		pnl_2.add (lbl_1);
		color.add ("白");
		color.add ("黒");
		color.add ("赤");
		color.add ("緑");
		color.add ("青");
		color.add ("シアン");
		color.add ("マゼンタ");
		color.add ("黄色");
		pnl_2.add (color);
		pnl_1.add (pnl_2);
		pnl_3.add (lbl_2);
		pnl_3.add (tf_katati);
		pnl_3.add (boton_katati);
		pnl_1.add (pnl_3);
		pnl_4.add (lbl_3);
		pnl_4.add (tf_kazu);
		pnl_4.add (boton_kazu);
		pnl_1.add (pnl_4);
		pnl_5.add (lbl_4);
		pnl_5.add (boton_giros);
		pnl_1.add (pnl_5);

		// oidores de los colores
		color.addItemListener ( new java.awt.event.ItemListener () {
			public void itemStateChanged (ItemEvent e) {
		   		mc.cambiaColor (color.getSelectedIndex ());
		   	}
		});
		boton_katati.addActionListener ( new java.awt.event.ActionListener () {
			public void actionPerformed (ActionEvent e) {
		    	mc.cambia_katati( Integer.parseInt(tf_katati.getText()));
			}
		});
		boton_kazu.addActionListener ( new java.awt.event.ActionListener () {
			public void actionPerformed (ActionEvent e) {
		    	mc.cambia_kazu( Integer.parseInt(tf_kazu.getText()));
			}
		});
		boton_giros.addActionListener ( new java.awt.event.ActionListener () {
			public void actionPerformed (ActionEvent e) {
				mc.cambiaGrado (Integer.parseInt(tf_katati.getText()));
			}
     	});

	}

	class miCanvas extends Canvas {

		int color = 0;
		int grado = 0;
		int nk = 50;
		int nn = 1;
  		double k = 0.0;

		miCanvas () {
			super ();
  		}

   		public void paint(Graphics g) {

			switch (color) {
				case 0 : g.setColor (Color.white);
					break;
				case 1 : g.setColor (Color.black);
					break;
				case 2 : g.setColor (Color.red);
					 break;
	 			case 3 : g.setColor (Color.green);
			  		 break;
	 			case 4 : g.setColor (Color.blue);
			   		break;
	  			case 5 : g.setColor (Color.cyan);
			   		break;
	  			case 6 : g.setColor (Color.magenta);
			   		break;
	  			case 7 : g.setColor (Color.yellow);
			   		break;
    		}

			for(int t = 0; t<=1000; t++){
				double x = Math.exp(t*0.01)*Math.cos(t*(nk*0.1)+k);
		 		double y = Math.exp(t*0.01)*Math.sin(t*(nk*0.1)+k);

				if(nn >= 1) {
					xpts[t] = (int)(x) + 400;
					ypts[t] = (int)(y) + 300;

				if(nn >= 2) {
					xpts2[t] = (int)(x) + 410;
					ypts2[t] = (int)(y) + 300;

				if(nn >= 3) {
					xpts3[t] = (int)(x) + 390;
					ypts3[t] = (int)(y) + 300;

				if(nn >= 4) {
					xpts4[t] = (int)(x) + 400;
					ypts4[t] = (int)(y) + 310;

				if(nn >= 5) {
					xpts5[t] = (int)(x) + 400;
					ypts5[t] = (int)(y) + 290;

				if(nn >= 6) {
					xpts6[t] = (int)(x) + 390;
					ypts6[t] = (int)(y) + 310;

				if(nn >= 7) {
					xpts7[t] = (int)(x) + 410;
					ypts7[t] = (int)(y) + 310;

				if(nn >= 8) {
					xpts8[t] = (int)(x) + 390;
					ypts8[t] = (int)(y) + 290;

				if(nn >= 9) {
					xpts9[t] = (int)(x) + 410;
					ypts9[t] = (int)(y) + 290;

				if(nn >= 10) {
					xpts10[t] = (int)(x) + 420;
					ypts10[t] = (int)(y) + 295;

				if(nn >= 11) {
					xpts11[t] = (int)(x) + 420;
					ypts11[t] = (int)(y) + 305;

				if(nn >= 12) {
					xpts12[t] = (int)(x) + 405;
					ypts12[t] = (int)(y) + 295;

				if(nn >= 13) {
					xpts13[t] = (int)(x) + 380;
					ypts13[t] = (int)(y) + 295;

				if(nn >= 14) {
					xpts14[t] = (int)(x) + 380;
					ypts14[t] = (int)(y) + 305;

				if(nn >= 15) {
					xpts15[t] = (int)(x) + 395;
					ypts15[t] = (int)(y) + 280;

				if(nn >= 16) {
					xpts16[t] = (int)(x) + 405;
					ypts16[t] = (int)(y) + 280;

				if(nn >= 17) {
					xpts17[t] = (int)(x) + 395;
					ypts17[t] = (int)(y) + 320;

				if(nn >= 18) {
					xpts18[t] = (int)(x) + 405;
					ypts18[t] = (int)(y) + 320;

				if(nn >= 19) {
					xpts19[t] = (int)(x) + 395;
					ypts19[t] = (int)(y) + 320;

				if(nn >= 20) {
					xpts20[t] = (int)(x) + 430;
					ypts20[t] = (int)(y) + 300;

				if(nn >= 21) {
					xpts21[t] = (int)(x) + 400;
					ypts21[t] = (int)(y) + 270;

				if(nn >= 22) {
					xpts22[t] = (int)(x) + 370;
					ypts22[t] = (int)(y) + 300;

				if(nn >= 23) {
					xpts23[t] = (int)(x) + 400;
					ypts23[t] = (int)(y) + 330;

				}}}}}}}}}}}}}}}}}}}}}}}

			}

			if(nn >= 1) {
				g.drawPolyline(xpts,ypts,1001);

			if(nn >= 2) {
				g.drawPolyline(xpts2,ypts2,1001);

			if(nn >= 3) {
				g.drawPolyline(xpts3,ypts3,1001);

			if(nn >= 4) {
				g.drawPolyline(xpts4,ypts4,1001);

			if(nn >= 5) {
				g.drawPolyline(xpts5,ypts5,1001);

			if(nn >= 6) {
				g.drawPolyline(xpts6,ypts6,1001);

			if(nn >= 7) {
				g.drawPolyline(xpts7,ypts7,1001);

			if(nn >= 8) {
				g.drawPolyline(xpts8,ypts8,1001);

			if(nn >= 9) {
				g.drawPolyline(xpts9,ypts9,1001);

			if(nn >= 10) {
				g.drawPolyline(xpts10,ypts10,1001);

			if(nn >= 11) {
				g.drawPolyline(xpts11,ypts11,1001);

			if(nn >= 12) {
				g.drawPolyline(xpts12,ypts12,1001);

			if(nn >= 13) {
				g.drawPolyline(xpts13,ypts13,1001);

			if(nn >= 14) {
				g.drawPolyline(xpts14,ypts14,1001);

			if(nn >= 15) {
				g.drawPolyline(xpts15,ypts15,1001);

			if(nn >= 16) {
				g.drawPolyline(xpts16,ypts16,1001);

			if(nn >= 17) {
				g.drawPolyline(xpts17,ypts17,1001);

			if(nn >= 18) {
				g.drawPolyline(xpts18,ypts18,1001);

			if(nn >= 19) {
				g.drawPolyline(xpts19,ypts19,1001);

			if(nn >= 20) {
				g.drawPolyline(xpts20,ypts20,1001);

			if(nn >= 21) {
				g.drawPolyline(xpts21,ypts21,1001);

			if(nn >= 22) {
				g.drawPolyline(xpts22,ypts22,1001);

			if(nn >= 23) {
				g.drawPolyline(xpts23,ypts23,1001);

			}}}}}}}}}}}}}}}}}}}}}}}

		}

  		//色
		public void cambiaColor (int c)
		{
			color = c;
			repaint ();
		}

		//渦の形
		void cambia_katati (int e)
		{
			nk = e;
			repaint ();
		}

		//渦の数
		void cambia_kazu (int d)
		{
			nn = d;
			repaint ();
		}

		//回転
		public void cambiaGrado (int r)
		{
			k = k + (Math.PI/2);
			repaint ();
		}

 	}
}
