jasu's blog
블로그 메뉴글
Artificial Intelligence(Max-Min CRI of Fuzzy System)
※ 이 프로그램에서는 결론부에서 6개의 버튼을 일일이 CLICK해 봄으로써 해당 조건부의 Y값으로 결론부의 범위를 자르게 하였습니다. 이유는 처음에는 조건부의 6개의 버튼중, 또는 비 퍼지값을 임의로 넣었을 때 입력값에 의하여 조건부에 그려짐과 동시에 결론부에도 일괄적인 처리를 통해서 그림을 뿌려지게 하려 하였으나 Paint 메소드가 컴퓨터 내에서 스레드의 형태로 화면에 그림을 뿌려주기 때문에 순차적인 접근으로 일괄적으로 결론부의 그림을 화면에 모두 뿌릴수 없었습니다. 그래서 다소 번거롭지만 각각의 조건부에 해당되는 결론부를 처리할 때 해당되는 결론부 버튼을 클릭함으로써 값을 얻게 하였습니다.
※ 결론부의 잘려진 그림을 그릴 때 직선의 방정식을 이용하여 각각의 X 또는 Y 좌표의 포인트를 계산하려 하였으나 컴퓨터 화면상의 픽셀은 세로, 즉 Y 픽셀은 위로 갈수록 값이 작아지기 때문에 직선의 방정식을 그대로 이용하면 원하는 픽셀의 결과를 얻을 수 없었습니다. 그래서 X를 구하기 위한 식 x=( ((x2-x1)/(y2-y1))*(y-y1) )+x1 의 식을 변형하여 y2와 y1의 위치를 변경하여 시도를 해 보았으나 그것 역시도 주어진 y값에 의해서 원하는 x픽셀을 찾지 못하였습니다. 이 과제에서 주어진 조건은 극히 제한적이기 때문에 y값이 0.25,0.5, 0.75, 1.0을 갖을 때를 switch문을 이용해서 x값을 찾도록 하였습니다.
※ 잘려진 결론부의 그림들을 모두 합하여 y좌표의 max값을 통한 x좌표의 회전값을 이용해서 무게중심을 구해야 합니다만 잘려진 각각의 도형들의 선들이 만나는 지점을 찾는 것이 어려웠습니다. 처음부터 직선의 방정식을 이용해서 잘려진 부분의 x값을 찾을 수 있었다면 약간의 조건문과 반복문으로 max 값만의 line을 축출할 수 있었을 텐데 저는 그렇게 하지 못하여 각각의 잘려진 부분의 무게중심들을 구하여 모두를 더한 값을 잘려진 부분이 있는 결론부의 수로 나눈 값을 최종 결과값으로 출력하도록 하였습니다.
※ Max-Min CRI 알고리즘의 개념은 극히 단순하지만 그것을 프로그램으로 구현하는 과정은 어려웠습니다. 특히 수학의 직선의 방정식과 컴퓨터의 픽셀을 연결하는데 연구가 필요하다고 느꼈습니다.
* 대학교 시절 인공지능 시간에 만들었던 퍼지 알고리즘 객체지향 언어의 장점을 활용하지 못하고 무작정 손가락 가는대로 만들었던 것 같다.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.JOptionPane;
public class Puzzy extends JFrame{
JPanel main,right,up,center,down,text_panel;
JPanel condition[];
JPanel conclusion[];
JPanel result_panel;
DrawArea_condition condition_canvas[];
DrawArea_conclusion conclusion_canvas[];
DrawArea_result result_canvas;
DrawArea_value result_value_panel;
JTextArea text_result;
JTextField text_field;
JButton processing;
JButton condition_button[];
JButton conclusion_button[];
JButton result_button;
JLabel title[];
JButton non;
JLabel title_text;
BevelBorder bevelborder;
EtchedBorder etchedborder;
int panel_count=0
int temp=0
int temp2=0
int text_value=-1
public float check;
int x1,x2;
int result_value;
public Puzzy(){
super("Puzzy Application");
Container c=getContentPane();
check=0
result_value_panel=new DrawArea_value();
processing=new JButton("Setting");
processing.addActionListener(new actionhandler_button());
non=new JButton("Non Puzzy Value :");
non.setEnabled(false);
text_field=new JTextField(10);
title_text=new JLabel(" Process Running...");
bevelborder=new BevelBorder(BevelBorder.RAISED);
etchedborder=new EtchedBorder(EtchedBorder.RAISED);
text_result=new JTextArea(9,115);
main=new JPanel();
right=new JPanel();
up=new JPanel();
center=new JPanel();
down=new JPanel();
down.setBackground(new Color(148,167,175));
text_panel=new JPanel();
text_panel.setLayout(new BorderLayout());
text_panel.add(title_text, BorderLayout.NORTH);
text_panel.add(new JScrollPane(text_result), BorderLayout.CENTER);
right.setLayout(new GridLayout(4,1));
title=new JLabel[4];
title[0]=new JLabel();
title[1]=new JLabel();
title[2]=new JLabel();
title[3]=new JLabel();
title[0].setText("Condition Type");
title[1].setText("Conclusion Type");
title[2].setText("");
title[3].setText("Processing Screen");
condition_canvas=new DrawArea_condition[6];
conclusion_canvas=new DrawArea_conclusion[6];
condition_canvas[panel_count]=new DrawArea_condition(-2,2); //조건부 canvas 선언
panel_count++; //인수는 x1,과 x2를 이용하여 라인을 그림
condition_canvas[panel_count]=new DrawArea_condition(0,4);
panel_count++;
condition_canvas[panel_count]=new DrawArea_condition(2,6);
panel_count++;
condition_canvas[panel_count]=new DrawArea_condition(4,8);
panel_count++;
condition_canvas[panel_count]=new DrawArea_condition(6,10);
panel_count++;
condition_canvas[panel_count]=new DrawArea_condition(8,12);
conclusion_canvas[0]=new DrawArea_conclusion(6,8); //결론부 canvas 선언
conclusion_canvas[1]=new DrawArea_conclusion(4,8);
conclusion_canvas[2]=new DrawArea_conclusion(2,6);
conclusion_canvas[3]=new DrawArea_conclusion(0,4);
conclusion_canvas[4]=new DrawArea_conclusion(0,2);
conclusion_canvas[5]=new DrawArea_conclusion(0,2);
JPanel right_sub[];
right_sub=new JPanel[4]; // 오른쪽 새로 패널 선언
for(int i=0i<4i++){
right_sub[i]=new JPanel();
right_sub[i].add(title[i]);
right_sub[i].setBorder(bevelborder);
right_sub[i].setBackground(new Color(148,167,175));
right.add(right_sub[i]);
}
right_sub[2].setLayout(new GridLayout(7,1));
right_sub[2].setBackground(new Color(102,102,153));
right_sub[2].add(non);
right_sub[2].add(text_field);
right_sub[2].add(new JLabel(""));
right_sub[2].add(title[2]);
right_sub[2].add(processing);
condition=new JPanel[6];
up.setLayout(new GridLayout(1,6));
conclusion=new JPanel[6];
center.setLayout(new GridLayout(1,6));
down.setLayout(new GridLayout(1,6));
result_button=new JButton("Max-Min Result");
result_button.addActionListener(new actionhandler_button());
result_canvas=new DrawArea_result(6,8);
result_panel=new JPanel();
result_panel.setLayout(new BorderLayout());
result_panel.add(result_button,BorderLayout.SOUTH);
result_panel.add(result_canvas,BorderLayout.CENTER);
result_panel.setBorder(bevelborder);
down.add(result_panel);
DrawArea_value_space draw[]=new DrawArea_value_space[4];
for(int i=0i<4i++){
draw[i]=new DrawArea_value_space();
}
JPanel tt[]=new JPanel[5]; //결과값 출력되는 가로 패널들의 선언
for(int i=0i<5i++){
tt[i]=new JPanel();
tt[i].setLayout(new BorderLayout());
tt[i].setBackground(new Color(148,167,175));
down.add(tt[i]);
}
condition_button=new JButton[6];
conclusion_button=new JButton[6];
tt[2].add(result_value_panel,BorderLayout.CENTER);
tt[0].add(draw[0]);
tt[1].add(draw[1]);
tt[3].add(draw[2]);
tt[4].add(draw[3]);
condition_button[0]=new JButton("Condition Type 1"); //조건부 패널 타이틀 선언
condition_button[1]=new JButton("Condition Type 2");
condition_button[2]=new JButton("Condition Type 3");
condition_button[3]=new JButton("Condition Type 4");
condition_button[4]=new JButton("Condition Type 5");
condition_button[5]=new JButton("Condition Type 6");
conclusion_button[0]=new JButton("Conclusion Type 1"); //결론부 패널 타이틀 선언
conclusion_button[1]=new JButton("Conclusion Type 2");
conclusion_button[2]=new JButton("Conclusion Type 3");
conclusion_button[3]=new JButton("Conclusion Type 4");
conclusion_button[4]=new JButton("Conclusion Type 5");
conclusion_button[5]=new JButton("Conclusion Type 6");
for(int i=0i<6i++){
condition_button[i].addActionListener(new actionhandler_button());
conclusion_button[i].addActionListener(new actionhandler_button());
condition[i]=new JPanel();
condition[i].setLayout(new BorderLayout());
condition[i].setBorder(etchedborder);
condition[i].add(condition_canvas[i], BorderLayout.CENTER); //조건부 패널들에 canvas와 button 붙임
condition[i].add(condition_button[i], BorderLayout.NORTH);
conclusion[i]=new JPanel();
conclusion[i].setLayout(new BorderLayout());
conclusion[i].setBorder(etchedborder);
conclusion[i].add(conclusion_canvas[i], BorderLayout.CENTER); //조건부 패널들에 canvas와 button 붙임
conclusion[i].add(conclusion_button[i], BorderLayout.SOUTH);
up.add(condition[i]); //up 패널에 6개의 조건부 패널을 붙임
center.add(conclusion[i]); //center 패널에 6개의 결론부 패널을 붙임
}
main.setBorder(etchedborder); // main ==> 왼쪽 패널
right.setBorder(etchedborder); // right==> 오른쪽 패널 세로
up.setBorder(etchedborder); // up ==> 왼쪽 main 패널 1번째 패널
center.setBorder(etchedborder); // center=> 왼쪽 main 패널 2번째 패널
down.setBorder(etchedborder); // down ==> 왼쪽 main 패널 3번째 패널
text_panel.setBorder(etchedborder); // text_panel==> 왼쪽 main 패널 4번째 패널
main.setLayout(new GridLayout(4,1));
main.add(up);
main.add(center);
main.add(down);
main.add(text_panel);
c.add(right, BorderLayout.EAST);
c.add(main, BorderLayout.CENTER);
setSize(1025,740);
show();
}
public void k_check(int k){ // k값에 따라 this.check 변수에 세로(x좌표) 입력
if(k==1)
this.check=(float)2.5
else if(k==2)
this.check=(float)5
else if(k==3)
this.check=(float)7.5
else if(k==4)
this.check=(float)10
else if(k==0)
this.check=(float)0
}
final class actionhandler_button implements ActionListener{
public void actionPerformed(ActionEvent ae){
JButton bb=(JButton)ae.getSource();
int k=0
if(bb.getLabel()=="Condition Type 1"){
temp=11
text_value=0
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Condition Type 2"){
temp=12
text_value=2
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Condition Type 3"){
temp=13
text_value=4
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Condition Type 4"){
temp=14
text_value=6
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Condition Type 5"){
temp=15
text_value=8
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Condition Type 6"){
temp=16
text_value=10
text_result.setText(text_result.getText()+"\nCondition Area\n"+bb.getLabel()+"를 선택했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Conclusion Type 1"){ //결론부 버튼이 눌려질 때 채크후 repainting
temp2=11
if(text_value==0) k=4
else if(text_value==1) k=3
else if(text_value==2) k=2
else if(text_value==3) k=1
else k=0
k_check(k); //입력된 k로 부터 check값을 넣음
conclusion_canvas[0].repaint();
}
if(bb.getLabel()=="Conclusion Type 2"){
temp2=12
if(text_value==0)
k=2
else if(text_value==1) k=3
else if(text_value==2) k=4
else if(text_value==3) k=3
else if(text_value==4) k=2
else if(text_value==5) k=1
else k=0
k_check(k);
conclusion_canvas[1].repaint();
}
if(bb.getLabel()=="Conclusion Type 3"){
temp2=13
if(text_value==0) k=0
else if(text_value==1) k=1
else if(text_value==2) k=2
else if(text_value==3) k=3
else if(text_value==4) k=4
else if(text_value==5) k=3
else if(text_value==6) k=2
else if(text_value==7) k=1
else if(text_value==8) k=0
else if(text_value==9) k=0
else if(text_value==10) k=0
else k=0
k_check(k);
conclusion_canvas[2].repaint();
}
if(bb.getLabel()=="Conclusion Type 4"){
temp2=14
if(text_value==0 || text_value==1 || text_value==2)
k=0
else if(text_value==3) k=1
else if(text_value==4) k=2
else if(text_value==5) k=3
else if(text_value==6) k=4
else if(text_value==7) k=3
else if(text_value==8) k=2
else if(text_value==9) k=1
else if(text_value==10) k=0
else k=0
k_check(k);
conclusion_canvas[3].repaint();
}
if(bb.getLabel()=="Conclusion Type 5"){
temp2=15
if(text_value==0 || text_value==1 || text_value==2 || text_value ==3 || text_value ==4) k=0
else if(text_value==5) k=1
else if(text_value==6) k=2
else if(text_value==7) k=3
else if(text_value==8) k=4
else if(text_value==9) k=3
else if(text_value==10) k=2
else k=0
k_check(k);
conclusion_canvas[4].repaint();
}
if(bb.getLabel()=="Conclusion Type 6"){
temp2=16
if(text_value==1 || text_value==2 || text_value==3 || text_value==4 || text_value==5 || text_value==6) k=0
else if(text_value==7) k=1
else if(text_value==8) k=2
else if(text_value==9) k=3
else if(text_value==10) k=4
else k=0
k_check(k);
conclusion_canvas[5].repaint();
}
if(bb.getLabel()=="Setting"){ // 입력된 숫자를 이용해 조건부 라인을 다시 셋팅함
temp=20
text_value=Integer.parseInt(text_field.getText());
text_result.setText(text_result.getText()+"\nCondition Area\n"+"비 퍼지값을 임으로 입력합니다. "+
"0부터 10까지의"+"숫자중에 "+text_value+" 값을 입력했습니다.\n");
for(int i=0i<6i++){
condition_canvas[i].repaint();
}
}
if(bb.getLabel()=="Max-Min Result"){
Result_Max_Min();
}
}
}
public void Result_Max_Min(){
result_canvas.repaint(); // 잘려진 부분을 합하는 canvas를 다시 그림
result_value_panel.repaint(); // 결과값이 나오는 부분 다시 그림
}
class DrawArea_condition extends Canvas{ //조건부 canvas paint 메소드
int x1,x2;
public DrawArea_condition(int x1,int x2){ // x1과 x2 픽셀 포인트로 라인을 그림
this.x1=x1;
this.x2=x2;
}
public void paint(Graphics g){
g.setColor(new Color(153,153,204));
g.fillRect(4,4,135,131);
g.setColor(Color.white);
g.drawLine(4,4,4,135);
g.drawLine(4,4,138,4);
g.setColor(Color.black);
g.drawLine(138,4,138,135);
g.drawLine(4,135,138,135);
g.setColor(Color.black);
g.drawLine(15,35,15,115);
g.drawLine(15,115,127,115);
for(int i=15i<=125i=i+11){ // x좌표 눈금 표시
g.drawOval(i,117,2,2);
}
for(int i=35i<115i+=8) // y좌표 눈금 표시
g.drawOval(11,i,2,2);
if(x1==-2){
g.drawLine(15,35,15+x2*11, 115);
}
if((x1!=-2) && (x2!=12)){
g.drawLine(15+x1*11,115, 15+x1*11+22, 35);
g.drawLine(15+x1*11+22,35,15+x2*11, 115);
}
if(x2==12){
g.drawLine(15+x1*11,115, 15+x1*11+22, 35);
}
g.setColor(Color.red);
switch(temp){ // temp 전역 변수를 이용하여 조건부에 눌려진 버튼에 의해
case 11 : g.drawLine(15,35,15+22, 115); // 자신의 canvas에 라인을 그림
break;
case 12 : g.drawLine(15,115, 15+22, 35);
g.drawLine(15+22,35,15+44, 115);
break;
case 13 : g.drawLine(15+22,115, 15+44, 35);
g.drawLine(15+44,35,15+66, 115);
break
case 14 : g.drawLine(15+44,115, 15+66, 35);
g.drawLine(15+66,35,15+88, 115);
break
case 15 : g.drawLine(15+66,115, 15+88, 35);
g.drawLine(15+88,35,15+110, 115);
break
case 16 : g.drawLine(15+8*11,115, 15+8*11+22, 35);
break
case 20 : g.drawLine((15+text_value*11)-22, 115, 15+text_value*11, 35);
g.drawLine(15+text_value*11,35 ,(15+text_value*11)+22, 115);
break
}
Font f=new Font("SansSerif", Font.BOLD,10);
g.setColor(Color.black);
g.setFont(f);
g.drawString("Y of 1",15,20);
g.drawString("X of 10",90,130);
}
public void update(){
}
}
public void swap(int x1,int x2){
this.x1=x1;
this.x2=x2;
}
class DrawArea_conclusion extends Canvas{ // 결론부 canvas에 라인을 그림
int x1,x2;
int height,width;
int width_stand,height_stand;
float conclusion_check;
int store_x[];
int store_y[];
public DrawArea_conclusion(int x1,int x2){
this.x1=x1;
this.x2=x2;
conclusion_check=0
height=8
width=13
width_stand=15
height_stand=35
store_x=new int[4];
store_y=new int[4];
for(int i=0i<4i++){ //잘려진 횐선을 그리기 위해 x,y 포인터를 저장하는
store_x[i]=0 //변수 배열 초기값 0으로 세팅
store_y[i]=0
}
}
public void paint(Graphics g){
//this.g=g;
g.setColor(new Color(153,153,204));
g.fillRect(4,4,135,131);
g.setColor(Color.white);
g.drawLine(4,4,4,135);
g.drawLine(4,4,138,4);
g.setColor(Color.black);
g.drawLine(138,4,138,135);
g.drawLine(4,135,138,135);
g.setColor(Color.black);
g.drawLine(15,35,15,115);
g.drawLine(15,115,127,115);
Font f=new Font("SansSerif", Font.BOLD,10);
g.setColor(Color.black);
g.setFont(f);
g.drawString("Y of 1",15,20);
g.drawString("X of 2000",90,130);
for(int i=width_stand;i<=119i=i+width)
g.drawOval(i,117,2,2);
for(int i=height_stand;i<115i+=height)
g.drawOval(11,i,2,2);
if(x2!=2){
g.drawLine(width_stand+x1*width,115, width_stand+x1*width+26, height_stand);
g.drawLine(width_stand+x1*width+26,height_stand,width_stand+x2*width, 115);
}
if(x2==2){ // 결론부 5,6번째 한 라인만 그림
g.drawLine(width_stand+x1*width, height_stand, width_stand+x1*width+26, 115);
}
conclusion_check=check;
if(check!=0){
int i=0,j=0
int x_value=0
int x2_value=0
x_value=get_x(width_stand+x1*width,conclusion_check*10); //필셀의 값을 실제 값으로 산출후 입렵
x2_value=get_x2(width_stand+x1*width,width_stand+x2*width,x_value,conclusion_check*10);
g.setColor(Color.red);
g.drawLine(width_stand,115-(int)((float)8.0*(conclusion_check*10)) ,125,115-(int)((float)8.0*(conclusion_check*10)));
g.setColor(Color.white);
g.drawLine(width_stand+x1*width, 115,x_value,115-(int)((float)8.0*(conclusion_check*10)));
store_x[i++]=width_stand+x1*width;
store_y[j++]=115
store_x[i++]=x_value;
store_y[j++]=115-(int)((float)8.0*(conclusion_check*10));
store_x[i++]=x2_value;
store_y[j++]=115-(int)((float)8.0*(conclusion_check*10));
store_x[i]=width_stand+x2*width;
store_y[j]=115
g.drawLine(x_value,115-(int)((float)8.0*(conclusion_check*10)),x2_value,115-(int)((float)8.0*(conclusion_check*10)));
g.drawLine(x2_value,115-(int)((float)8.0*(conclusion_check*10)), width_stand+x2*width,115);
g.drawLine(width_stand+x1*width+26, 115, get_x_center(width_stand+x1*width,115,width_stand+x1+width+26,height_stand,115-(int)((float)8.0*(conclusion_check*10)))+26, 115-(int)((float)8.0*(conclusion_check*10)));
g.drawString("[ "+new Float(conclusion_check).toString()+" ]",width_stand+x1*width+15,115-(int)(8.0*(conclusion_check*10))-5);
check=0
}
}
public void update(){
}
}
public int get_x2(int x1,int x2,int x_value,float y_value){ //4개의 x좌표 중 3번째 x좌표를 찾는 부분
int x=0
if(temp2==11)
x=x2;
else if(temp2==15 || temp2==16)
switch((int)(y_value*10.0)){
case 25 : x=x2-7
break
case 50 : x=x2-13
break
case 75 : x=x2-20
break
case 100: x=x2-26
break
}
else { x=(x1+26)-x_value;
x=x+x1+26
}
return x;
}
public int get_x(int x1,float y_value){ // 4개의 x좌표 중 2번째 x좌표를 찾는 부분
int x=0
x=x1;
if(temp2==15 || temp2==16) // 결론부 5,6번 째는 x1 좌표를 그대로 사용
x=x1;
else switch((int)(y_value*10.0)){ //결론부 1,2,3,4의 x1좌표를 찾음
case 25 : x=x+7
break
case 50 : x=x+13
break
case 75 : x=x+20
break
case 100: x=x+26
break
}
return x;
}
public int get_x_center(int x1,int y1,int x2,int y2,int y_value){ //잘린 범위를 표시하기 위해 중앙 x포인터 찾음
int x=0
x=x1+((x2-x1)/(y2-y1))*(y_value-y1);
return x;
}
public float get_round(int value){ //x좌표 픽셀을 이용하여 실제 회전수 값을 찾음
int count=400
int re=0
for(int i=15i<=119i=i+13){
if(value<=i){
re=count;
break
}
count=count+200
}
return re;
}
class DrawArea_value_space extends Canvas{
public DrawArea_value_space(){
}
public void paint(Graphics g){
g.setColor(new Color(174,174,174));
g.fillRect(0,100,140,10);
g.setColor(Color.white);
g.drawLine(0,100,140,100);
g.drawLine(0,100,0,110);
g.setColor(Color.black);
g.drawLine(0,110,140,110);
g.drawLine(140,110,140,100);
}
public void update(){
}
}
class DrawArea_value extends Canvas{ //최종 결과값이 출력되는 canvas
public DrawArea_value(){
}
public void paint(Graphics g){
g.setColor(new Color(99,180,170));
g.fillRect(0,60,140,50);
g.setColor(Color.white);
g.drawLine(0,60,140,60);
g.drawLine(0,60,0,110);
g.setColor(Color.black);
g.drawLine(0,110,140,110);
g.drawLine(0,135,138,135);
g.drawLine(140,110,140,60);
g.setColor(Color.white);
Font f=new Font("SansSerif", Font.BOLD,22);
g.setFont(f);
g.drawString(new Integer((int)result_value).toString(),50,93);
Font ff=new Font("SansSerif", Font.BOLD,14);
g.setFont(ff);
g.drawString("Result Value",50,130);
}
public void update(){
}
}
class DrawArea_result extends Canvas{ //모든 잘려진 부분들의 합을 그리는 canvas
int x1,x2;
int height,width;
int width_stand,height_stand;
float center_area[]; // 각각의 무게중심을 구한 값을 입력하는 변수
public DrawArea_result(int x1,int x2){
this.x1=x1;
this.x2=x2;
height=8
width=13
width_stand=15
height_stand=35
center_area=new float[6];
}
public void paint(Graphics g){
for(int i=0i<4i++)
center_area[i]=0
g.setColor(new Color(148,167,175));
g.fillRect(4,4,135,131);
g.setColor(Color.white);
g.drawLine(4,4,4,135);
g.drawLine(4,4,138,4);
g.setColor(Color.black);
g.drawLine(138,4,138,135);
g.drawLine(4,135,138,135);
g.setColor(Color.black);
g.drawLine(15,35,15,115);
g.drawLine(15,115,127,115);
for(int i=15i<=119i=i+13)
g.drawOval(i,117,2,2);
for(int i=35i<115i+=8)
g.drawOval(11,i,2,2);
g.setColor(Color.white);
int x=0,y=0
int tti=0
Font f=new Font("SansSerif", Font.BOLD,10);
g.setFont(f);
int last=0
for(int i=0i<=5i++){
if(conclusion_canvas[i].conclusion_check!=0){ //잘려지는 부분이 있는 조건
g.drawPolyline(conclusion_canvas[i].store_x,conclusion_canvas[i].store_y,4);
center_area[tti++]=(conclusion_canvas[i].conclusion_check*get_round(conclusion_canvas[i].store_x[1])+
conclusion_canvas[i].conclusion_check*get_round(conclusion_canvas[i].store_x[2]))/
(conclusion_canvas[i].conclusion_check+conclusion_canvas[i].conclusion_check);
last=(int)center_area[tti-1];
text_result.setText(text_result.getText()+"\n"+"Conclusion Type "+new Integer(i+1).toString()+
" Type 의 무게중심 : "+"( "+new Float(conclusion_canvas[i].conclusion_check).toString()+" * "+
new Integer((int)get_round(conclusion_canvas[i].store_x[1])).toString()+" + "+
new Float(conclusion_canvas[i].conclusion_check).toString()+" * "+
new Integer((int)get_round(conclusion_canvas[i].store_x[2])).toString()+") / "+
"( "+new Float(conclusion_canvas[i].conclusion_check).toString()+" + "+
new Float(conclusion_canvas[i].conclusion_check).toString()+" ) = ");
text_result.setText(text_result.getText()+new Integer((int)center_area[tti-1]).toString());
g.drawString(new Integer(i+1).toString()+": "+new Integer((int)center_area[tti-1]).toString(),95,10+((tti)*9));
}
}
text_result.setText(text_result.getText()+"\n\n");
float tt=0
int j;
text_result.setText(text_result.getText()+"( ");
for(j=0j<(tti-1);j++){
text_result.setText(text_result.getText()+ new Integer((int)center_area[j]).toString()+" + ");
}
for(j=0j<tti;j++){ //각각의 무게중심을 더함
tt=tt+center_area[j];
}
result_value=(int)(tt/(j)); //각각의 무게중심을 잘린 부분이 있는 수로 나눔
text_result.setText(text_result.getText()+ new Integer(last).toString());
text_result.setText(text_result.getText()+" ) / "+new Integer(j).toString()+" = "+new Integer((int)result_value).toString());
g.setColor(Color.black);
g.drawString("Y of 1",15,20);
g.drawString("X of 2000",90,130);
}
public void update(){
}
}
public static void main(String args[]){
Puzzy PuzzyApp =new Puzzy();
PuzzyApp.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
}