/* Aqui vamos a hacer un programa que nos permita hacer mosdificaciones de tipo, cambiar el color de los circulos, cambiar el tamanio del radio y cambiar la cantidad de circulos.... utillizar listados para poder elegir valores determinados.      Ahora tratar de ingresar a mano los valores de la radio y de la cantidad de circulos. CONCLUSIONES: Este grafico tiene algunos conceptos a considerar. Los numeros multiplos de 4, se concentran en el (400,530) y en (400,270) que son los puntos extremos superior e inferior del circulo. Estos puntos del radio se aproximan al cero, y no dibuja ningun circulo. */ import java.applet.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Vector; public class programaOketsu2_3 extends Applet { miCanvas mc; Panel pnl_1; Panel pnl_2 = new Panel (); Panel pnl_3 = new Panel (); Panel pnl_4 = new Panel (); Label lbl_1 = new Label ("色"); Label lbl_2 = new Label ("円の数"); Label lbl_3 = new Label ("中心の円の半径"); TextField tf_nro_circulo = new TextField ("50"); TextField tf_valor_radio = new TextField ("130"); Choice color_circulo = new Choice (); Button botonCirculo = new Button ("変える"); Button botonRadio = new Button ("変える"); int n = Integer.parseInt(tf_nro_circulo.getText()); int radio = Integer.parseInt(tf_valor_radio.getText()); public void init () { setBackground (Color.white); /* Dar color de fondo */ setLayout (new BorderLayout ()); /* Divide en secciones */ //lbl_1.setFont (new Font ("TimesRoman", Font.BOLD, 15)); //lbl_2.setFont (new Font ("TimesRoman", Font.BOLD, 15)); //lbl_3.setFont (new Font ("TimesRoman", Font.BOLD, 15)); add ("Center", mc = new miCanvas ()); add ("North", pnl_1 = new Panel ()); pnl_1.setBackground (Color.pink); //pnl_1.setLayout (new GridLayout (1, 3)); pnl_2.add (lbl_1); color_circulo.add ("黒"); color_circulo.add ("赤"); color_circulo.add ("青"); color_circulo.add ("緑"); color_circulo.add ("黄色"); color_circulo.add ("マグネンタ"); color_circulo.add ("水色"); color_circulo.add ("ピンク"); color_circulo.add ("オレンジ色"); pnl_2.add (color_circulo); pnl_1.add (pnl_2); pnl_3.add (lbl_2); pnl_3.add(tf_nro_circulo); pnl_3.add(botonCirculo); pnl_1.add (pnl_3); pnl_4.add (lbl_3); pnl_4.add (tf_valor_radio); pnl_4.add(botonRadio); pnl_1.add(pnl_4); // oidores de los colores color_circulo.addItemListener ( new java.awt.event.ItemListener () { public void itemStateChanged (ItemEvent e) { mc.cambiaColorCirculo (color_circulo.getSelectedIndex ()); } }); botonCirculo.addActionListener ( new java.awt.event.ActionListener () { public void actionPerformed (ActionEvent e) { mc.cambiaCantCirculo( Integer.parseInt(tf_nro_circulo.getText())); } }); botonRadio.addActionListener ( new java.awt.event.ActionListener () { public void actionPerformed (ActionEvent e) { mc.cambiaValorRadio( Integer.parseInt(tf_valor_radio.getText())); } }); } } class miCanvas extends Canvas { int color_circulo = 0; /* 最初の色  Color del circulo inicial es negro */ int n=50; /* 最初の円の数 50 es la cantidad de circulos que se dibujara en primera instancia */ //基準の円の半径 double radioA=130; /* 130 va a ser el tamanno inicial del radio de los circulos */ double radioB=radioA/2; /* 130 va a ser el tamanno inicial del radio de los circulos */ miCanvas () { super (); } public void paint(Graphics g){ int i=0; double radio1, radio2; double dt=2.0*Math.PI/n; double h = radioA*Math.cos(dt); double Ax=300; double Ay=300; double Bx=300; double By=300; double x1, y1, x2, y2, x3 ,y3, x4 ,y4; double t1, t2 ,q1, q2; /* --- Defino el Color de los circulos --- */ switch (color_circulo) { case 0 : g.setColor (Color.black); break; case 1 : g.setColor (Color.red); break; case 2 : g.setColor (Color.blue); break; case 3 : g.setColor (Color.green); break; case 4 : g.setColor (Color.yellow); break; case 5 : g.setColor (Color.magenta); break; case 6 : g.setColor (Color.cyan); break; case 7 : g.setColor (Color.pink); break; case 8 : g.setColor (Color.orange); break; } /* --- Aqui dibuja el primer circulo central --- */ double ang =2.0*Math.PI/n; /* este 2*PI, es para poder recorrer toda la circunsferencia, y se divide por la cantidad de circulos "n" que quiero representar en ella */ t1=0; //最初の座標(大) x1 = radioA * Math.cos(t1)+Ax; y1 = radioA * Math.sin(t1)+Ay; //大きい円を書く for(t1=0; t1<=6.2832; t1+=0.04){ x2=radioA * Math.cos(t1)+Ax; y2=radioA * Math.sin(t1)+Ay; g.drawLine((int) x1,(int) y1 ,(int) x2,(int) y2); x1=x2; y1=y2; } t2=0; //最初の座標(小) x3 = radioB * Math.cos(t2)+Bx; y3 = radioB * Math.sin(t2)+By; //小さい円を書く for(t2=0; t2<=6.2832; t2+=0.04){ x4=radioB * Math.cos(t2)+Bx; y4=radioB * Math.sin(t2)+By; g.drawLine((int) x3,(int) y3,(int) x4,(int) y4); x3=x4; y3=y4; } /* --- Aqui comienzo a dibujar los circulos de los lados --- */ int a = 0; for(i=1; i<=n; i++){ //花(大)の間隔 q1= ang*(double)i; /* Angulo de donde va a formar el circulo */ //花(大)最初のx座標 Ax=radioA*Math.cos(q1)+300; /* Aqui se calcula los desplazamientos de x e y */ //花最初のy座標 Ay=300-radioA*Math.sin(q1); /*--- las sumas y las restas de 400 es para alinearlo al centro ----*/ //花の半径 radio1=50; /* Aqui se calcula el radio de cada circulo que se va a graficar */ //花(小)の間隔 q2= ang*(double)i; /* Angulo de donde va a formar el circulo */ //花(大)最初のx座標 Bx=radioB*Math.cos(q2)+300; /* Aqui se calcula los desplazamientos de x e y */ //花最初のy座標 By=300-radioB*Math.sin(q2); /*--- las sumas y las restas de 400 es para alinearlo al centro ----*/ //花(小)の半径 radio2=radio1/2; t1=0; x1 = radio1 * Math.cos(t1)+Ax; /* Calcula el primer punto de x1 e y1 */ y1 = radio1 * Math.sin(t1)+Ay; for(t1=0; t1<=6.2832; t1+=0.04){ x2=radio1 * Math.cos(t1)+Ax; /* Calcula el segunto punto de union, x2 e y2 */ y2=radio1 * Math.sin(t1)+Ay; g.drawLine((int) x1,(int) y1 ,(int) x2,(int) y2); /* Diagramacion */ x1=x2; y1=y2; } t2=0; x3 = radio2 * Math.cos(t2)+Bx; /* Calcula el primer punto de x1 e y1 */ y3 = radio2 * Math.sin(t2)+By; for(t2=0; t2<=6.2832; t2+=0.04){ x4=radio2 * Math.cos(t2)+Bx; /* Calcula el segunto punto de union, x2 e y2 */ y4=radio2 * Math.sin(t2)+By; g.drawLine((int) x3,(int) y3 ,(int) x4,(int) y4); /* Diagramacion */ x3=x4; y3=y4; } } } /* --- para actualizar los valores ingresados ---- */ public void cambiaColorCirculo (int c) { color_circulo = c; repaint (); } void cambiaCantCirculo (int d) { n = d; repaint (); } void cambiaValorRadio (int e) { radioA = e; radioB = e/2; repaint (); } }