//======================================================
// Numerical Analysis package in java
// Plot (Çizim ) programı
// Dr. Turhan Coban
// EGE Üniversitesi Mühendislik Fakultesi, Makina Bölümü
// turhan.coban@ege.edu.tr
// =====================================================
/*
 * Swing version.
 */
import java.lang.Integer;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
// Plot2D;
// PlotShapesSW;
// PlotW
// BasicWindowMonitor;

public class PlotW extends JFrame implements ItemListener,ActionListener, MouseListener,MouseMotionListener
{
    private String s="";
	//f2 ff=new f2();
	boolean inAnApplet = true;
	BufferedReader fbilgi;
    final static String KONTROLPANEL = "Kontrol sayfası";
    final static String    PLOTPANEL = "Plot sayfası   ";
     final static String   INFOPANEL = "Bilgi sayfası   ";
    Plot2D jta;
    double xi1,yi1,xi2,yi2;
    int n;
    JLabel altbar;          //writing area   
    JLabel promptXmin;      // Label prompt in Xmin field
    JLabel promptXmax;      // Label prompt in Xmax field
    JLabel promptYmin;      // Label prompt in Ymin field
    JLabel promptYmax;      // Label prompt in Ymax field
    JLabel promptLabel;     // Label prompt Plot Label
    JLabel promptXLabel;    // Label prompt Plot XLabel
    JLabel promptYLabel;    // Label prompt Plot YLabel
    JLabel promptXntic;      // Label prompt in Xmin field
    JLabel promptYntic;      // Label prompt in Xmax field
    JLabel promptXgridon;    // Label prompt in Ymin field
    JLabel promptYgridon;    // Label prompt in Ymax field
    JLabel promptXlogon;     // x axis log scale on
    JLabel promptYlogon;     // y axis log scale on
    JLabel pr[];
    JTextField inputXmin;    // input field Xmin
    JTextField inputXmax;    // input field Xmax
    JTextField inputYmin;    // input field Ymin
    JTextField inputYmax;    // input field Ymax
    JTextField inputLabel;   // input field Label
    JTextField inputXLabel;  // input field XLabel
    JTextField inputYLabel;  // input field YLabel
    JTextField inputXntic;   // input field xntic
    JTextField inputYntic;   // input field yntic
    JTextArea bilgi;
    JCheckBox inputXgridon;  // input field xgridon
    JCheckBox inputYgridon;  // input field ygridon
    JCheckBox inputXlogon;  // check field xlogon
    JCheckBox inputYlogon;  // check field ylogon    
    JLabel promptAdditionalLabel[];
    //to add additional label to the graphic window
    JTextField inputAdditionalLabel[]; 
    JTextField inputAdditionalXLabel[];
    JTextField inputAdditionalYLabel[];    
    JButton printButton;
	JLabel arkarenk1;
	JButton arkarenk2;
    JLabel lab1[];
	JLabel lab2[];
    JComboBox c1[];
    JButton col1[];
    JButton but1[];
    JScrollPane skrolPane; 
    Color renk1;
    Color renk2;
    
    public PlotW()
    {
    super("Plot çizimi");
        try{Plot pi=new Plot();plotWkur(pi); } catch(IOException e)
       {
       System.err.println("Error Opening File \n"+e.toString());
       System.exit(1);
       }        
    }
    
    public PlotW(Plot pi)
    {
    super(pi.label);
    plotWkur(pi);
    }

    public void plotWkur(Plot pi)
    {
	renk2=Color.white;
    n=pi.nline;    
    lab1=new JLabel[n];
    lab2=new JLabel[6];
    c1=new JComboBox[n];
    col1=new JButton[n];
    bilgi=new JTextArea();
    promptAdditionalLabel=new JLabel[5];
    inputAdditionalLabel= new JTextField[5]; 
    inputAdditionalXLabel= new JTextField[5];
    inputAdditionalYLabel=new JTextField[5];
    arkarenk1=new JLabel("Arka Plan rengi");
    arkarenk2=new JButton("");
    arkarenk2.setBackground(renk2);
    pr=new JLabel[5];
    but1=new JButton[5];
    for(int i=0;i<5;i++)
    {promptAdditionalLabel[i]=new JLabel("ek başlık #"+i+" x,y koordinatlarında");
    inputAdditionalLabel[i]=new JTextField("");
    inputAdditionalXLabel[i]=new JTextField("");
    inputAdditionalYLabel[i]=new JTextField("");
    but1[i]=new JButton("ek başlık koordinatı gir");
    }
    pr[0]=new JLabel("");
    pr[1]=new JLabel("x koordinatı");
    pr[2]=new JLabel("y koordinatı");
    pr[3]=new JLabel("Başlık");
    pr[4]=new JLabel("son tıklanan noktayı");
    lab2[0]=new JLabel("");
    lab2[1]=new JLabel("çizgi türü");
    lab2[2]=new JLabel("renk seçim tablosu");
    
    for(int i=0;i<n;i++)
    {
	Color color1=new Color(pi.red[i],pi.green[i],pi.blue[i]);
	lab1[i]=new JLabel("eğri "+i+" ");
    c1[i]=new JComboBox(pi.plotst);
    c1[i].setSelectedIndex(pi.plottype[i]);
    col1[i]=new JButton(" ");
    col1[i].setBackground(color1);
    }
    
    Container contentPane = getContentPane();
    renk1=contentPane.getBackground();
    JTabbedPane tabbedPane = new JTabbedPane();
        promptXmin=new JLabel("Xmin ");
        inputXmin=new JTextField(10);
        promptXmax=new JLabel("Xmax ");
        inputXmax=new JTextField(10);
        promptYmin=new JLabel("Ymin ");
        inputYmin=new JTextField(10);
        promptYmax=new JLabel("Ymax ");
        inputYmax=new JTextField(10);
        //*******
        promptLabel=new  JLabel("Plot başlığı     : ");
        promptXLabel=new JLabel("x ekseni başlığı : ");
        promptYLabel=new JLabel("y ekseni başlığı : ");
        inputLabel=new JTextField(40);
        inputXLabel=new JTextField(40);
        inputYLabel=new JTextField(40);
        inputLabel.setBackground(renk1);
        inputXLabel.setBackground(renk1);
        inputYLabel.setBackground(renk1);
        //*******
        promptXntic=new JLabel("X tik no");
        inputXntic=new JTextField(10);
        promptYntic=new  JLabel("Y tik no");
        inputYntic=new JTextField(10);
        
        promptXgridon=new JLabel("X grid (küçük kare)");
        if(pi.xgridon!=0) inputXgridon=new JCheckBox("   ",true);
        else              inputXgridon=new JCheckBox("   ",false);        
        promptYgridon=new JLabel("Y grid (küçük kare)");
        if(pi.ygridon!=0) inputYgridon=new JCheckBox("   ",true);
        else              inputYgridon=new JCheckBox("   ",false);        
        promptXlogon=new JLabel("x log ");    
        promptYlogon=new JLabel("y log ");   
        if(pi.xlog!=0) inputXlogon=new JCheckBox("   ",true);
        else            inputXlogon=new JCheckBox("   ",false);
        if(pi.ylog!=0) inputYlogon=new JCheckBox("   ",true);
        else            inputYlogon=new JCheckBox("   ",false);
          // check field xlogon
        JPanel pane1 = new JPanel();
        JPanel pane3 = new JPanel();
        JPanel mpane=new JPanel();
        bilgi.setText(bilgioku());
        bilgi.setBackground(renk1);
        pane3.add(bilgi);
       
        mpane.setLayout(new GridLayout(6,4));
        JPanel p1=new JPanel();
        
        p1.setLayout(new GridLayout(6,5));
        mpane.add(promptXmin);
        inputXmin.setBackground(renk1);
        inputXmax.setBackground(renk1);
        inputYmin.setBackground(renk1);
        inputYmax.setBackground(renk1);
        inputXntic.setBackground(renk1);
        inputYntic.setBackground(renk1);
        mpane.add(inputXmin);
        mpane.add(promptXmax);
        mpane.add(inputXmax);
        mpane.add(promptYmin);
        mpane.add(inputYmin);
        mpane.add(promptYmax);
        mpane.add(inputYmax);
        mpane.add(promptXntic);
        mpane.add(inputXntic);
        mpane.add(promptYntic);
        mpane.add(inputYntic);
        mpane.add(promptXgridon);
        mpane.add(inputXgridon);
        mpane.add(promptYgridon);
        mpane.add(inputYgridon);
        mpane.add(promptXlogon);
        mpane.add(inputXlogon);
        mpane.add(promptYlogon);
        mpane.add(inputYlogon);
        mpane.add(arkarenk1);
        mpane.add(arkarenk2);
        pane1.add(mpane,BorderLayout.NORTH);
        JPanel xpane=new JPanel();
        xpane.setLayout(new GridLayout((n+1),3));
        for(int i=0;i<3;i++)
        {lab2[i].setBackground(renk1);
	     xpane.add(lab2[i]);}
        for(int i=0;i<n;i++)
        { 
	        
	    xpane.add(lab1[i]);
        xpane.add(c1[i]);
        xpane.add(col1[i]);
        c1[i].setBackground(renk1);
        }        
        //********
        JPanel lpane=new JPanel();
        lpane.setLayout(new GridLayout(3,2));
        lpane.add(promptLabel);
        lpane.add(inputLabel);
        lpane.add(promptXLabel);
        lpane.add(inputXLabel);
        lpane.add(promptYLabel);
        lpane.add(inputYLabel);
        //********
        p1.add(pr[0]);
        p1.add(pr[1]);
        p1.add(pr[2]);
        p1.add(pr[3]);
        p1.add(pr[4]);
        for(int i=0;i<5;i++)
        {inputAdditionalLabel[i].setBackground(renk1);
         inputAdditionalXLabel[i].setBackground(renk1);
         inputAdditionalYLabel[i].setBackground(renk1);
	     p1.add(promptAdditionalLabel[i]);
         p1.add(inputAdditionalXLabel[i]);
         p1.add(inputAdditionalYLabel[i]);
         p1.add(inputAdditionalLabel[i]);
         p1.add(but1[i]);       
        }
        //lpane.add(p1);
        skrolPane=new JScrollPane(xpane,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        pane1.add(lpane,BorderLayout.NORTH);
        pane1.add(p1,BorderLayout.CENTER);
        pane1.add(skrolPane,BorderLayout.SOUTH);

        //*********
        for(int i=0;i<5;i++)
        {inputAdditionalLabel[i].addActionListener(this);
        inputAdditionalXLabel[i].addActionListener(this);
        inputAdditionalYLabel[i].addActionListener(this); 
        but1[i].addActionListener(this);
        }
        
        for(int i=0;i<n;i++)
        { c1[i].addItemListener(this);
	      col1[i].addActionListener(this);
        }        

        //**********
        inputXmin.addActionListener(this);
        inputXmax.addActionListener(this);
        inputYmin.addActionListener(this);
        inputYmax.addActionListener(this);
        inputLabel.addActionListener(this);
        inputXLabel.addActionListener(this);
        inputYLabel.addActionListener(this);
        inputXntic.addActionListener(this);
        inputYntic.addActionListener(this);
        inputXlogon.addItemListener(this);
        inputYlogon.addItemListener(this);
        inputXgridon.addItemListener(this);
        inputYgridon.addItemListener(this);
        arkarenk2.addActionListener(this);
        jta=new Plot2D(pi);
        inputXmin.setText(Double.toString(jta.p1.xmin));
        inputXmax.setText(Double.toString(jta.p1.xmax));
        inputYmin.setText(Double.toString(jta.p1.ymin));
        inputYmax.setText(Double.toString(jta.p1.ymax));
        inputXntic.setText(Integer.toString(jta.p1.xntic));
        inputYntic.setText(Integer.toString(jta.p1.yntic));
        inputLabel.setText(jta.p1.label);
        inputXLabel.setText(jta.p1.xlabel);
        inputYLabel.setText(jta.p1.ylabel);
      
        JPanel pane2 = new JPanel();
        pane2.setLayout(new BorderLayout());
        altbar=new JLabel();
        pane2.add(altbar,BorderLayout.SOUTH);
        pane2.addMouseListener(this);
        pane2.addMouseMotionListener(this);        
        pane2.add(jta);
        tabbedPane.addTab(PLOTPANEL,    pane2);
        tabbedPane.addTab(KONTROLPANEL, pane1);
        tabbedPane.addTab(INFOPANEL,new JScrollPane(pane3,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        contentPane.add(  tabbedPane, BorderLayout.CENTER);
	}
    
    public void itemStateChanged(ItemEvent e)
    {
    inputXmin.setText(Double.toString(jta.p1.xmin));
    inputXmax.setText(Double.toString(jta.p1.xmax));
    inputYmin.setText(Double.toString(jta.p1.ymin));
    inputYmax.setText(Double.toString(jta.p1.ymax));
    inputXntic.setText(Integer.toString(jta.p1.xntic));
    inputYntic.setText(Integer.toString(jta.p1.yntic));
    Object source=e.getItemSelectable();
    
    if(source==inputXgridon)
    {
        if (e.getStateChange() == ItemEvent.DESELECTED)
        {jta.p1.xgridon=0;}
        else
        {jta.p1.xgridon=1;}
    }
    else if(source==inputYgridon)
    {
        if (e.getStateChange() == ItemEvent.DESELECTED)
        {jta.p1.ygridon=0;}
        else
        {jta.p1.ygridon=1;}
    }
    else if(source==inputXlogon)
    {
        if (e.getStateChange() == ItemEvent.DESELECTED)
        {jta.p1.setXlogScaleOff();}
        else
        {jta.p1.setXlogScaleOn();}
    }
    else if(source==inputYlogon)
    {
       if (e.getStateChange() == ItemEvent.DESELECTED)
       {jta.p1.setYlogScaleOff();}
       else
       {jta.p1.setYlogScaleOn();}
    }
    else
    {
    for(int i=0;i<n;i++)
    {   if(source==c1[i])
	    {jta.p1.plottype[i]=c1[i].getSelectedIndex();
	     if(jta.p1.plottype[i] == 10) jta.p1.ch[i]='*';//you can change character set by using setPlotType(0,'%');
         if(jta.p1.plottype[i] == 11) jta.p1.ch[i]='#';
         if(jta.p1.plottype[i] == 12) jta.p1.ch[i]='$';
         if(jta.p1.plottype[i] == 13) jta.p1.ch[i]='%';
         if(jta.p1.plottype[i] == 14) jta.p1.ch[i]='&';
         if(jta.p1.plottype[i] == 15) jta.p1.ch[i]='-';
         if(jta.p1.plottype[i] == 16) jta.p1.ch[i]='~';
         if(jta.p1.plottype[i] == 17) jta.p1.ch[i]='+';
         if(jta.p1.plottype[i] == 18) jta.p1.ch[i]='x';
         if(jta.p1.plottype[i] == 19) jta.p1.ch[i]='=';     }
    }    
    inputLabel.setText(jta.p1.label);
    inputXLabel.setText(jta.p1.xlabel);
    inputYLabel.setText(jta.p1.ylabel);
    jta.yenidenciz();
    }
}
    public void actionPerformed(ActionEvent e)
    {
    if (e.getSource()==inputXmin )
    {Double valXmin=new Double(inputXmin.getText());
    jta.p1.xmin=valXmin.doubleValue();}    
    else if (e.getSource()==inputXmax )
    {Double valXmax=new Double(inputXmax.getText());
    jta.p1.xmax=valXmax.doubleValue();}    
    else if (e.getSource()==inputYmin )
    {Double valYmin=new Double(inputYmin.getText());
    jta.p1.ymin=valYmin.doubleValue();}    
    else if (e.getSource()==inputYmax )
    {Double valYmax=new Double(inputYmax.getText());
    jta.p1.ymax=valYmax.doubleValue();}
    else if (e.getSource()==inputXntic )
    {Integer valXntic=new Integer(inputXntic.getText());
    jta.p1.xntic=valXntic.intValue();}
    else if (e.getSource()==inputYntic )
    {Integer valYntic=new Integer(inputYntic.getText());
    jta.p1.yntic=valYntic.intValue();}
    else if (e.getSource()==inputLabel )
    {jta.p1.label=inputLabel.getText();}
    else if (e.getSource()==inputXLabel )
    {jta.p1.xlabel=inputXLabel.getText();}
    else if (e.getSource()==inputYLabel )
    {jta.p1.ylabel=inputYLabel.getText();}
    else if(e.getSource()==arkarenk2)
    { renk2=JColorChooser.showDialog(null,"grafik arka plan rengi ",renk2 );
      jta.setBackground(renk2);
      arkarenk2.setBackground(renk2);
    }
    String s1;
    for(int i=0;i<5;i++)
    { 
	  if(e.getSource()==but1[i])
	  { jta.p1.label_x[i]=xi2;
	    jta.p1.label_y[i]=yi2;
	    inputAdditionalXLabel[i].setText(""+xi2);
	    inputAdditionalYLabel[i].setText(""+yi2);
	  }
	  if(e.getSource()==inputAdditionalLabel[i])
      {
       jta.p1.label_at_xy[i]=inputAdditionalLabel[i].getText();       
       s1=inputAdditionalXLabel[i].getText();       
       if(s1!="") jta.p1.label_x[i]=Double.parseDouble(s1);
       else jta.p1.label_x[i]=0.0;
       s1=inputAdditionalYLabel[i].getText();
       if(s1!="") jta.p1.label_y[i]=Double.parseDouble(s1);
       else jta.p1.label_y[i]=0.0;
       s1=jta.p1.label_at_xy[i];
      }
      else if(e.getSource()==inputAdditionalXLabel[i])
      {s1=inputAdditionalXLabel[i].getText();
       if(s1!="") jta.p1.label_x[i]=Double.parseDouble(s1);
       else jta.p1.label_x[i]=0.0;
      }
      else if(e.getSource()==inputAdditionalYLabel[i])
      {s1=inputAdditionalYLabel[i].getText();
       if(s1!="") jta.p1.label_y[i]=Double.parseDouble(s1);
       else jta.p1.label_y[i]=0.0;}
      }
    for(int i=0;i<n;i++)
    {
	Color color1=new Color(jta.p1.red[i],jta.p1.green[i],jta.p1.blue[i]);    
	Color color2;
    if (e.getSource()==col1[i] )
    { color2=JColorChooser.showDialog(null,"grafik programı eğri "+i,color1 );
    jta.p1.red[i]=color2.getRed();jta.p1.green[i]=color2.getGreen();jta.p1.blue[i]=color2.getBlue();
     col1[i].setBackground(color2);
    }
    }    
    jta.yenidenciz();
    }
    
      public void degerleriGir(String e,int x,int y)
      {
      s=e;
      if(jta.p1.xlog!=0)
      {xi1=jta.p1.xmin+Math.pow(10.0,(double)((x-jta.p1.xabsmin)/(double)jta.p1.abswidth*(double)jta.p1.xminmaxlog+1.0))-10.0; }
      else
      {xi1=jta.p1.xmin+(double)(x-jta.p1.xabsmin)/(double)jta.p1.abswidth*(jta.p1.xmax-jta.p1.xmin);}
      if(jta.p1.ylog!=0)
      {yi1=jta.p1.ymin-10.0+Math.pow(10.0,((double)(1.0-(double)(y-jta.p1.yabsmin-jta.p1.absheight)/(double)jta.p1.absheight*(double)jta.p1.yminmaxlog))); }
      else
      {yi1=jta.p1.ymin-(double)(y-jta.p1.yabsmin-jta.p1.absheight)/(double)jta.p1.absheight*(jta.p1.ymax-jta.p1.ymin);}
      altbar.setText(e+" ["+xi1+" , "+yi1+"] ");
      //jta.yenidenciz();
      }
      
      public void degerleriGir1(String e,int x,int y)
      {
      s=e;
      if(jta.p1.xlog!=0)
      {xi2=jta.p1.xmin+Math.pow(10.0,(double)((x-jta.p1.xabsmin)/(double)jta.p1.abswidth*(double)jta.p1.xminmaxlog+1.0))-10.0; }
      else
      {xi2=jta.p1.xmin+(double)(x-jta.p1.xabsmin)/(double)jta.p1.abswidth*(jta.p1.xmax-jta.p1.xmin);}
      if(jta.p1.ylog!=0)
      {yi2=jta.p1.ymin-10.0+Math.pow(10.0,((double)(1.0-(double)(y-jta.p1.yabsmin-jta.p1.absheight)/(double)jta.p1.absheight*(double)jta.p1.yminmaxlog))); }
      else
      {yi2=jta.p1.ymin-(double)(y-jta.p1.yabsmin-jta.p1.absheight)/(double)jta.p1.absheight*(jta.p1.ymax-jta.p1.ymin);}
      }
      
      public void mousePressed(MouseEvent e)
      {  if(e.isMetaDown()) {degerleriGir1("Fare değerleri kaydedildi",e.getX(),e.getY());} //sağ tuş basıldığında
         else if(e.isAltDown())             //orta tuş basıldığında
             {} 
         else { degerleriGir1("Fare değerleri kaydedildi",e.getX(),e.getY());}  //sol tuş basıldığında
      }
      
      public void mouseClicked(MouseEvent e)
      { degerleriGir1("Kliklendi",e.getX(),e.getY()); }

      public void mouseReleased(MouseEvent e)
      { degerleriGir1("Bırakıldı",e.getX(),e.getY()); }

      public void mouseEntered(MouseEvent e)
      { setTitle("Fare applet alanı içinde"); }

      public void mouseExited(MouseEvent e)
      { setTitle("Fare applet alanı dışında");
        degerleriGir("Fare applet alanı dışında",e.getX(),e.getY());
      }
      //MouseMotionListener (fare hareket dinleyicisi) metotlari

      public void mouseDragged(MouseEvent e)
      { degerleriGir("basilip cekiliyor",e.getX(),e.getY()); }

      public void mouseMoved(MouseEvent e)
      { degerleriGir("hareket halinde",e.getX(),e.getY()); }      
 
      public static void plot()
      {
	  //takes plot sata from Plot.txt file    
      PlotW pencere= new PlotW();
      pencere.addWindowListener(new BasicWindowMonitor());
      pencere.setSize(1000,700);
      pencere.setVisible(true);
      pencere.setDefaultCloseOperation(pencere.DISPOSE_ON_CLOSE);
      }      
      public static void plot(Plot pi)
      {
      //take plot data from pi object
	  PlotW pencere= new PlotW(pi);
      pencere.addWindowListener(new BasicWindowMonitor());
      pencere.setSize(1000,700);
      pencere.setVisible(true);
      pencere.setDefaultCloseOperation(pencere.DISPOSE_ON_CLOSE);
      } 
      public static void main(String[] args)
      {
      PlotW pencere= new PlotW();
      pencere.addWindowListener(new BasicWindowMonitor());
      pencere.setSize(1000,700);
      pencere.setVisible(true);
      pencere.setDefaultCloseOperation(pencere.DISPOSE_ON_CLOSE);
      }
      public String bilgioku()  
      {String s;
s= " 1.6.13 JAVA 2 BOYUTLU BİLİMSEL GRAFİK ÇIKTI SINIFI : PLOT   \n ";
s+= "  \n ";
s+= "Bilimsel grafikler verinin analizini kolaylaştırmaları ve   \n ";
s+= "görsel olarak bir dizi sayıya göre çok daha anlamlı olmalarıyla   \n ";
s+= "oldukça yoğun olarak kullanılan bilimsel ortamlardır. Profesyonel   \n ";
s+= "bilimsel bilgisayar ortamlarına ulaşmak için genelde belli bir   \n ";
s+= "ücret karşılığında aldığımız profesyonel programları kullanabiliriz.   \n ";
s+= "Örneğin Matlab oldukça güzel bir grafik ortamı sunmaktadır,   \n ";
s+= "ancak bu tür paketler programlama ortamını kendi dilleriyle   \n ";
s+= "sınırlandırmaktadır. Burada Java ortamında program yazan   \n ";
s+= "arkadaşlarımızın oldukça basit bir şekilde programlarına   \n ";
s+= "aktarabilecekleri genel maksatlı 2 boyutlu bir bilimsel   \n ";
s+= "grafik ortamı programı olan Plot sınıfının (ve ona bağlı   \n ";
s+= "çalışan sınıflar gurubu) java ortamında kullanımı   \n ";
s+= "tanımlanacaktır.  \n ";
s+= "  \n ";
s+= "Plot sınıfı tek bir dosya, bir dosya gurubu, java çok boyutlu   \n ";
s+= "değişkenleri, ve java fonksiyonlarından girdi alabilen, normal   \n ";
s+= "veya logaritmik ortamda çıktı verebilen, kübik şerit aradeğer,  \n ";
s+= "en küçük kareler ve ortogonal polinom en küçük kareler, Lagrange   \n ";
s+= "interpolasyonu gibi yöntemlerle yeterli olmayan verilerde ara   \n ";
s+= "değer hesaplayarak veriye eğri uydurabilen bir sistemdir.   \n ";
s+= "Burada Program kodlamasına girmeden programın kullanılması ile  \n ";
s+= "ilgili bilgi vermeye çalışacağız.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-1 PlotT1.java örnek problemi  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT1  \n ";
s+= "{  public static void main(String args[]) throws IOException  \n ";
s+= "  {Plot pp=new Plot(\"in.txt\");  \n ";
s+= "   pp.plot();}}  \n ";
s+= "  \n ";
s+= "İlk kodumuz PlotT1 in.txt dosyasındaki veriyi okuyarak ilk  \n ";
s+= "çıktımızı oluşturdu. Programda gördüğümüz ilk satır olan kurucu metod     \n ";
s+= "Plot pp=new Plot(\"in.txt\"); veriyi aktardı ve   pp.plot();   \n ";
s+= "deyimi de grafik penceresini oluşturdu.Bu ikinci deyim hemen her zaman   \n ";
s+= "pencereyi açma komutu olarak kalacaktır. Pencereyi kapama komutu   \n ";
s+= "verilmemiştir. Elle kapatılacaktır.  \n ";
s+= "  \n ";
s+= "Grafik ortamının ikinci sayfasına baktığımızda değiştirilebilecek çeşitli   \n ";
s+= "parametreler görüyoruz. Bunlar eğride kullanılan çizgi çeşitleri, renk   \n ";
s+= "parametresi, grid, plot başlıkları, ek başlıklar, logaritmik skala  gibi   \n ";
s+= "özelliklerdir. Bu özellikler değiştirilerek grafik daha küçük bir alt   \n ";
s+= "bölgede incelenebilir. Sayfa istenilen ölçeklerde karelere ayrılabilir.  \n ";
s+= "   \n ";
s+= "Grafik rengi standart java renk editörünü kullanarak değiştirilebilir.   \n ";
s+= "Listeden seçilen çeşitli grafik seçenekleri kullanılabilir.  \n ";
s+= "   \n ";
s+= "Bu programımızda dinamik tanım yerine statik tanım yaparsak aynı program   \n ";
s+= "aşağıdaki şekli alır  \n ";
s+= "  \n ";
s+= "Program 1.6.13-1A PlotT1.java örnek problemi  \n ";
s+= "import java.io.*;  \n ";
s+= "class plotT1  \n ";
s+= "{    \n ";
s+= "  public static void main(String args[]) throws IOException  \n ";
s+= "  {Plot.file(\"in.txt\");}  \n ";
s+= "}  \n ";
s+= "  \n ";
s+= "Burada statik tanımlamaları genelde tek bir adımda grafik çizdirmek için   \n ";
s+= "kullandığımızı, birden fazla adım olduğunda dinamik tanımlamaları tercih   \n ";
s+= "etmemizin daha iyi olacağını belirtelim. İkinci örneğimizde veriyi java   \n ";
s+= "programı boyutlu değişkenlerinden alıyoruz  \n ";
s+= "  \n ";
s+= "Program 1.6.13-2  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2A  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "     double yy[]={1,4,9,16,25};  \n ";
s+= "     Plot pp=new Plot(xx,yy);  \n ";
s+= "     pp.plot();}}  \n ";
s+= "   \n ";
s+= "Aynı programı statik metodla çağıracak olursak :  \n ";
s+= "   \n ";
s+= "Program 1.6.13-2A  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2A  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot.data(xx,yy);}}  \n ";
s+= "Çıktı yine üstte tanımlandığı gibidir.    \n ";
s+= "  \n ";
s+= "Program 1.6.13-3  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2B  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addSpline(xx,yy,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "aradeğer hesabı yapmak için sadece    pp.addSpline(xx,yy,10); deyimini   \n ";
s+= "eklememiz kafi geldi. Buradaki her nokta arasını 10 eşit parçaya bölerek   \n ";
s+= "ara değerleri kübik şerit interpolasyonuyla hesaplamamız anlamına gelmektedir.   \n ";
s+= "Eğer verinin kaç numaralı eğri olarak Plot programına girdiğini bilirsek,   \n ";
s+= "veriyi Plot sınıfının okuduğu veriden alarak da aynı aradeğer oluşumunu yapabiliriz.   \n ";
s+= "Plot eğri setleri numaraları ekleme sıramıza göre 0 dan başlayarak artarak gider.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-3A  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2B2  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addSpline(0,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "Program 1.6.13-3  ve Program 1.6.13-3A çıktıları aynıdır. Kübik şerit interpolasyonunun   \n ";
s+= "detaylarını öğrenmek istersek eğri uydurma bölümümüzü inceleyebilirsiniz.   \n ";
s+= "  \n ";
s+= "Birden fazla grafik komutunu bir arada kullanmak isterseniz statik metodlara   \n ";
s+= "başvuramazsınız, örneğin yukardaki programda hem veriyi hemde verinin   \n ";
s+= "interpolasyon değerlerini çizdirdiğimizden statik kullanıma uygun değildir.   \n ";
s+= "Ancak kendi statik metodumuzda bu tür kompleks kullanımları birleştirerek   \n ";
s+= "kullanabiliriz. Program 1.6.13-3B, Program 1.6.13-3 ile aynı çıktıyı verecektir.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-3B  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2B  \n ";
s+= "{      \n ";
s+= "     public static void plot(double xx[],double yy[])  \n ";
s+= "     {Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addSpline(xx,yy,10);  \n ";
s+= "      pp.plot();}  \n ";
s+= "        \n ";
s+= "     public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      plot(xx,yy);}}  \n ";
s+= "  \n ";
s+= "Aynı aradeğer  hesaplarını pp.addB_Spline(xx,yy,10); deyimini ekleyerek B şerit   \n ";
s+= "interpolasyonu kullanarak da yapabiliriz.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-3C  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2B1  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addB_Spline(xx,yy,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "  \n ";
s+= " Aynı aradeğer hesaplarını ikinci dereceden Ortogonal polinom uydurarak   \n ";
s+= " (her araya 10 değer olmak üzere)  \n ";
s+= "  \n ";
s+= "Program 1.6.13-4  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2C  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addOPEKK(xx,yy,2,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "ikinci dereceden  polinom uydurarak (fx=a0+a1*x+a2*x2 - her araya 10 değer olmak üzere)  \n ";
s+= "Program 1.6.13-5  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2D  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addEKK(xx,yy,2,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "veya Lagrange aradeğer hesabıyla da ulaşabiliriz.  \n ";
s+= "Program 1.6.13-6  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2E  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {double xx[]={1,2,3,4,5};  \n ";
s+= "      double yy[]={1,4,9,16,25};  \n ";
s+= "      Plot pp=new Plot(xx,yy);  \n ";
s+= "      pp.addLagrange(xx,yy,10);  \n ";
s+= "      pp.plot();}}  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "Tüm interpolasyon hesap detaylarını kitabımızın 6. bölümünde inceleyebilirsiniz.  \n ";
s+= "  \n ";
s+= "Plot Programındaki kurucu metodumuz tamamen boş olabilir.   \n ";
s+= "Program 1.6.13-7 (Dinamik çağırma)  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT01  \n ";
s+= "{public static void main (String args[]) throws IOException  \n ";
s+= "  {Plot pp=new Plot();  \n ";
s+= "   pp.plot();}}  \n ";
s+= "  \n ";
s+= "Program 1.6.13-7A (Statik çağırma)  \n ";
s+= "import java.io.*;  \n ";
s+= "class PlotT2B1  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {Plot.file();}}  \n ";
s+= "  \n ";
s+= "Bu durumda programımız veri için Plot.txt dosyasına bakacaktır.Bu dosyada  \n ";
s+= "Plot başlığı         \n ";
s+= "x ekseni  \n ";
s+= "y ekseni        \n ";
s+= "2   \n ";
s+= "in.txt  0 0 0 0    \n ";
s+= "out.txt 3 0 0 255   \n ";
s+= "  \n ";
s+= "verisi olduğunu varsayalım. Bunun anlamı \"Plot başlığı\"  \"x ekseni\" ve \"y ekseni\"   \n ";
s+= "grafik başlıklarını kullanarak in.txt ve out.txt dosyalarındaki verilerin çizilmesidir.   \n ";
s+= "Verilerin yanındaki ilk rakam grafik çizim türünü ondan sonraki 3 rakam da renk kodunu (kırmızı yeşil ve mavi olarak) ifade eder.  \n ";
s+= "Programın grafik çizim kodları :   \n ";
s+= "\"1 __ __ __ __ \",  \n ";
s+= "\"2 . _ . _ . _ \",  \n ";
s+= "\"3 . _ _ . . _ _ .\",  \n ";
s+= "\"4 - - - - - - - - \",  \n ";
s+= "\"5  ______\",  \n ";
s+= "\"6  __ __ __ __ \",  \n ";
s+= "\"7 . _ . _ . _ \",  \n ";
s+= "\"8  . _ _ . . _ _ .\",  \n ";
s+= "\"9 - - - - - \",  \n ";
s+= "\"10  *       \" ,  \n ";
s+= "\"11  #       \",  \n ";
s+= "\"12  $       \",  \n ";
s+= "\"13  %       \",  \n ";
s+= "\"14  &       \",  \n ";
s+= "\"15  -       \",  \n ";
s+= "\"16  ~       \",  \n ";
s+= "\"17  +       \",  \n ";
s+= "\"18  x       \",  \n ";
s+= "\"19  =       \",  \n ";
s+= "\"20  kare\",    \n ";
s+= "\"21  dolu kare\",  \n ";
s+= "\"22  daire\",  \n ";
s+= "\"23  dolu daire\",  \n ";
s+= "\"24  üçken\",  \n ";
s+= "\"25  eşkenar dörtgen\",  \n ";
s+= "\"26  beşken\",  \n ";
s+= "\"27  altıgen\",  \n ";
s+= "\"28  dolu üçgen\",  \n ";
s+= "\"28  dolu eşkenar dörtken\",  \n ";
s+= "\"30  dolu beşgen\",  \n ";
s+= "\"31  dolu altıgen\",  \n ";
s+= "\"32  üç köşe yıldız\",  \n ";
s+= "\"33  dört köşe yıldız\",  \n ";
s+= "\"34  beş köşe yıldız\",  \n ";
s+= "\"35  altı köşe yıldız\",  \n ";
s+= "\"36  dolu üç köşe yıldız\",  \n ";
s+= "\"37  dolu dört köşe yıldız\",  \n ";
s+= "\"38  dolu beş köşe yıldız\",  \n ";
s+= "\"39  dolu altı köşe yıldız\",  \n ";
s+= "\"40  çubuk grafik\",  \n ";
s+= "\"41  dolu çubuk grafik\"};  \n ";
s+= "şeklindedir.   \n ";
s+= "Grafik türü ve renk kodları burada bahsettiğimiz tüm metodlar için de mevcuttur. Örneğin  \n ";
s+= "  \n ";
s+= "Bir fonksiyonun grafiğinin çizilmesi için en basit yol fonksiyonu   \n ";
s+= "abstract sınıf  f_x ten türeterek yapılır.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-8 (Dinamik versiyon)  \n ";
s+= "import java.io.*;  \n ";
s+= "class f3 extends f_x  \n ";
s+= "{double func(double x)  \n ";
s+= " {return x*x*x+3.6*x*x-36.4;}}  \n ";
s+= "   \n ";
s+= "class PlotT06  \n ";
s+= "{public static void main (String args[]) throws IOException  \n ";
s+= " {f3 ff2=new f3();      \n ";
s+= "  Plot pp=new Plot(ff2,0.0,7.0,400,2);  \n ";
s+= "  pp.plot();}}  \n ";
s+= "  \n ";
s+= "Program 1.6.13-8A (Statik versiyon)  \n ";
s+= "import java.io.*;  \n ";
s+= "  \n ";
s+= "class f3 extends f_x  \n ";
s+= "{double func(double x)  \n ";
s+= " { return x*x*Math.abs(Math.sin(Math.sqrt(x)))-5.0;}}  \n ";
s+= "   \n ";
s+= "class PlotT06  \n ";
s+= "{    public static void main (String args[]) throws IOException  \n ";
s+= "     {Plot.func(new f3(),0.0,10.0,400,0);}  \n ";
s+= "}  \n ";
s+= "  \n ";
s+= "bu programın grafik çıktısı  \n ";
s+= "   \n ";
s+= "  \n ";
s+= "şeklinde olacaktır. Bu fonksiyon matematik olarak ifade edilirse f(x)=x3+3.6x2-36.4   \n ";
s+= "şeklindedir. 0 ile 7 arasında 400 nokta oluşturarak fonksiyonunun çizilmesi istenmiştir.  \n ";
s+= "  \n ";
s+= "Birden fazla fonksiyonun grafiğini tek bir sınıfta tanımlıyabiliriz.  \n ";
s+= "  \n ";
s+= "Program 1.6.13-9 (Dinamik versiyon)  \n ";
s+= "import java.io.*;  \n ";
s+= "class f3 extends fi_x  \n ";
s+= "{  \n ";
s+= " double[] func(double x)  \n ";
s+= " { double f[]=new double[2];	   \n ";
s+= "   f[0]=x*Math.sin(10.0*Math.PI*x)+1.0;  \n ";
s+= "   f[1]=x*x;  \n ";
s+= "   return f;}}  \n ";
s+= "   \n ";
s+= "class PlotT03  \n ";
s+= "{public static void main (String args[]) throws IOException  \n ";
s+= "  { f3 ff2=new f3();      \n ";
s+= "    Plot pp=new Plot(ff2,-2.0,2.0,400,2);  \n ";
s+= "    pp.plot();}}  \n ";
s+= "  \n ";
s+= "Program 1.6.13-9A (Statik versiyon)  \n ";
s+= "import java.io.*;  \n ";
s+= "  \n ";
s+= "class f3 extends fi_x  \n ";
s+= "{  \n ";
s+= " double[] func(double x)  \n ";
s+= " { double f[]=new double[2];	   \n ";
s+= "   f[0]=x*Math.sin(10.0*Math.PI*x)+1.0;  \n ";
s+= "   f[1]=x*x;  \n ";
s+= "   return f;}  \n ";
s+= "}  \n ";
s+= "  \n ";
s+= "class PlotT03  \n ";
s+= "{public static void main (String args[]) throws IOException  \n ";
s+= "  { Plot.func(new f3(),-2.0,2.0,400,2);}}  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "  \n ";
s+= "    \n ";
s+= "  \n ";
s+= "veya ayrı ayrı birden fazla sınıfta tanımlayarak da çizebiliriz.   \n ";
s+= "  \n ";
s+= "Program 1.6.13-10  \n ";
s+= "import java.io.*;  \n ";
s+= "class f3 extends f_x  \n ";
s+= "{double func(double x)  \n ";
s+= " {return x*x;}}  \n ";
s+= "  \n ";
s+= "class f4 extends f_x  \n ";
s+= "{double func(double x)  \n ";
s+= " {return x*Math.sin(10.0*Math.PI*x)+1.0;}}  \n ";
s+= "   \n ";
s+= "class PlotT07  \n ";
s+= "{public static void main (String args[]) throws IOException  \n ";
s+= " {f3 ff3=new f3();  \n ";
s+= "  f4 ff4=new f4();      \n ";
s+= "  Plot pp=new Plot(ff3,-3.0,2.0,400);  \n ";
s+= "  pp.addFunction(ff4,-2.0,2.0,400);  \n ";
s+= "  pp.plot();}}  \n ";
s+= "  \n ";
s+= "Fonksiyonlar ayrı ayrı çağrıldığında değişik sınır değerleri de tanımlayabiliriz.   \n ";
s+= "Burada kurucu metot birinci fonksiyon tarafından çağrıldığından ikinci fonksiyonun   \n ";
s+= "çağrılmasında  \n ";
s+= "  \n ";
s+= "pp.addFunction(ff4,-2.0,2.0,400);  \n ";
s+= "kullanılmıştır.  \n ";
s+= "   \n ";
s+= "addFunction metoduna benzer olarak addData metodu mevcuttur, java boyutlu değişken   \n ";
s+= "verilerinin eklenmesinde kullanılır.  \n ";
s+= "  \n ";
s+= "pp.addData(xx,yy,0,0,0,0);  \n ";
s+= "  \n ";
s+= "Son olarak çeşitli fonksiyon ve verileri kullanan ve diğer grafik verilerini de   \n ";
s+= "programın içinde değiştiren bir programa göz atalım  \n ";
s+= "  \n ";
s+= "Program 1.6.13-11  \n ";
s+= "import java.io.*;  \n ";
s+= "   \n ";
s+= "class f3 extends fi_x  \n ";
s+= "{  \n ";
s+= " double[] func(double x)  \n ";
s+= " {  \n ";
s+= "   double f[]=new double[2];	   \n ";
s+= "   f[0]=Math.sin(x)+x/2;  \n ";
s+= "   f[1]=Math.sqrt(x);  \n ";
s+= "   return f;  \n ";
s+= " }}  \n ";
s+= "class PlotT3  \n ";
s+= "{  \n ";
s+= "     public static void main (String args[]) throws IOException  \n ";
s+= "     {//Plot pp=new Plot();  \n ";
s+= "     String fi[]={\"in.txt\",\"out.txt\"};  \n ";
s+= "     f3 ff=new f3();  \n ";
s+= "     int ipt[]={0,1};  \n ";
s+= "     int ir[]={0,0};  \n ";
s+= "     int ig[]={0,0};  \n ";
s+= "     int ib[]={0,2};  \n ";
s+= "     double xx[]={1,2,3,4,5,6};  \n ";
s+= "     double yy[]={2,3,4,5,6,7};  \n ";
s+= "     Plot pp=new Plot(fi); //read data from fi (in.txt,out.txt data are added up)  \n ";
s+= "     //pp.addData(fi);  \n ";
s+= "     pp.setPlotType(0,0);//  \n ";
s+= "     pp.setPlotType(1,1);//   \n ";
s+= "     pp.addData(xx,yy,0,0,0,0); //one set of addional data  \n ";
s+= "     pp.setPlotType(2,41);//bar chart  \n ";
s+= "     pp.setColor(2,0,0,255); //blue  \n ";
s+= "     pp.addFunction(ff,0.0,20.0,50,2,ipt,ir,ig,ib); //two additional function  \n ";
s+= "     pp.setPlabel(\"Fonksiyon Plot\");  \n ";
s+= "     pp.setXlabel(\"x ekseni\");  \n ";
s+= "     pp.setYlabel(\"y ekseni\");  \n ";
s+= "     pp.plot();}}  \n ";
s+= "Bu program 2 fonksiyonu f3 sınıfından almakta, 2 set veriyi fi string'i aracılığıyla   \n ";
s+= "in.txt ve out.txt dosyalarından okumaktadır. 3. veri seti(2 no'lu veri) bar grafik   \n ";
s+= "(grafik tipi 41) olarak seçilmiştir. Bu paketleri kullanarak çok daha karmaşık grafik   \n ";
s+= "bileşenleri oluşturulabilir. Örneğin nemli havanın termodinamik özellikleri programında   \n ";
s+= "fare ile aktif veri girişi (Fareye basıldığında x ve y koordinatlarını alarak bu   \n ";
s+= "değerler için hesap yapma) gibi ek özellikler katılabilir. Bu özellikler burada   \n ";
s+= "verdiğimiz paketin içerisinde kullanıma hazır olarak mevcutsa da verdiğimiz şekliyle   \n ";
s+= "kullanılamaz.   \n ";
s+= "  \n ";
s+= "Grafik Paketi Temel Bileşenleri :   \n ";
s+= "  \n ";
s+= "Plot.java kurucu metotlar ve girdi çıktı metotlarını içerir  \n ";
s+= "PlotW.java  : çizimi gerçekleştiren ana metodudur. Grafik sayfalarını ve bu sayfaların   \n ";
s+= "kontrollerini içerir.  \n ";
s+= "PlotShapesSW: çeşitli Plot alt elemanlarının çizim tekniklerini içerir, çizgi,   \n ";
s+= "üçgen,bar grafik gibi  \n ";
s+= "Plot2D : PlotShapes alt elemanlarını grafik çizimi haline getirir, sırasıyla   \n ";
s+= "alt elemanları çağırır.   \n ";
s+= "  \n ";
s+= "Şimdi bu paketlerin listelerini verelim. Bu tür program kodları programlamaya   \n ";
s+= "yeni başlayan arkadaşlarımız için kompleks olabilir, bu durumda sadece kullanımla   \n ";
s+= "yetinebilirler, ancak dileyen kodları alarak daha da geliştirebilir, Bu tür   \n ";
s+= "geliştirmelerde tek dileğim geliştirmelerden beni de haberdar etmeniz, eğer   \n ";
s+= "yeni kodlar uygunsa orijinal kodları değiştirebiliriz. Programlarımızın kodlarını   \n ";
s+= "vermeden önce tüm metodlarımızın bir listesini verelim :  \n ";
s+= "  \n ";
s+= "Kurucu metodlar : (grafik programını dinamik olarak kurar ve veriyi kullanıma hazırlar)  \n ";
s+= "public Plot() throws IOException     \n ";
s+= "public Plot(String pl,String xl,String yl,int xnt,int ynt,int xgo,int ygo,String fn[],int ipt[],int ir[],int ig[]                  \n ";
s+= " ,int ib[]) throws IOException       \n ";
s+= "  public Plot(String fn[],int ipt[],int ir[],int ig[],int ib[]) throws IOException	  \n ";
s+= "  public Plot(String fn[]) throws IOException  : Read file names from String fn[] and plot them   \n ";
s+= "  public Plot(double xi[][],double yi[][],int ipt[],int ir[],int ig[],int ib[]) : read plot data from xi[][] and yi[][]  \n ";
s+= "  public Plot(double xiyi[][]) : read plot data xi[] and yi[] from xiyi[][] string     \n ";
s+= "  public Plot(double xi[][],double yi[][]) : read plot data from xi[][] and yi[][]  \n ";
s+= "  public Plot(double xi[],double yi[]) : read plot data from xi[] and yi[]  \n ";
s+= "  public Plot(f_x f,double xm,double xma,int N,int ipt,int ir,int ig,int ib)    \n ";
s+= " public Plot(f_x f,double xm,double xma,int N) : create plot data from a simple function f_x f  \n ";
s+= " public Plot(fi_x f,double xm,double xma,int Number_of_Data,int Number_of_Function)   \n ";
s+= "   \n ";
s+= "Statik metodlar : (verinin kısa yoldan grafiğinin çizilmesini sağlar)  \n ";
s+= " public static double[] data(double xmin,double xmax,double dx)   \n ";
s+= " public static double[] data(double xmin,double xmax,int n)  \n ";
s+= " public static Plot func(f_x ff1,double xmin,double xmax,int n,int pnumber)  \n ";
s+= " public static Plot func(f_x ff1,double xmin,double xmax,int n)  \n ";
s+= " public static Plot func(f_x ff1,double xmin,double xmax)  \n ";
s+= " public static Plot func(fi_x ff1,double xmin,double xmax,int n,int pnumber)  \n ";
s+= " public static Plot func(fi_x ff1,double xmin,double xmax,int n)  \n ";
s+= " public static Plot func(fi_x ff1,double xmin,double xmax)  \n ";
s+= "  \n ";
s+= " x , y ve ana başlığı eklemek  \n ";
s+= "  public void setPlabel(String ip) {label=ip;}  \n ";
s+= "  public void setXlabel(String ix) {xlabel=ix;}  \n ";
s+= "  public void setYlabel(String iy) {ylabel=iy;}  \n ";
s+= "  public void setXYlabel(String ix,String iy) {xlabel=ix;ylabel=iy;}  \n ";
s+= "  \n ";
s+= "kurucu metoddan sonra grafik penceresine ek veri eklemek  \n ";
s+= "public void addData(double xi[],double yi[])  \n ";
s+= "public void addData(double xi[],double yi[],int iplottype)  \n ";
s+= "public void addData(double xi[],double yi[],int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addData(double xi[][],double yi[][])  \n ";
s+= "public void addData(double xi[][],double yi[][],int ip[])  \n ";
s+= "public void addData(double xi[][],double yi[][],int ip[],int ir[],int ig[],int ib[])  \n ";
s+= "public void addFunction(f_x f,double xmi,double xma,int N,int ipt)  \n ";
s+= "public void addFunction(f_x f,double xmi,double xma,int N)  \n ";
s+= "public void addFunction(f_x f,double xmi,double xma,int N,int ipt,int ir,int ig,int ib)	  \n ";
s+= "public void addFunction(fi_x f,double xmin,double xmax,int Number_of_Data,int Number_of_Function)  \n ";
s+= "public void addFunction(fi_x f,double xmin,double xmax,int Number_of_Data,int Number_of_Function,int ipt[])  \n ";
s+= "public void addFunction(fi_x f,double xmin,double xmax,int Number_of_Data,int Number_of_Function, ,int ipt[])  \n ";
s+= "  \n ";
s+= "eğri uydurarak ek veri eklemek  \n ";
s+= "public void addOPEKK(double xi[],double yi[],int npolinom,int aradegersayisi)  \n ";
s+= "public void addOPEKK(double xi[],double yi[],int npolinom,int aradegersayisi,int iplottype)  \n ";
s+= "public void addOPEKK(double xi[],double yi[],int npolinom,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addEKK(double xi[],double yi[],int npolinom,int aradegersayisi)  \n ";
s+= "public void addEKK(double xi[],double yi[],int npolinom,int aradegersayisi,int iplottype)  \n ";
s+= "public void addEKK(double xi[],double yi[],int npolinom,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addEKK(int linenumber,int npolinom,int aradegersayisi,int iplottype)  \n ";
s+= "public void addEKK(int linenumber,int npolinom,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addLagrange(double xi[],double yi[],int aradegersayisi)  \n ";
s+= "public void addLagrange(double xi[],double yi[],int aradegersayisi,int iplottype)  \n ";
s+= "public void addLagrange(double xi[],double yi[],int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addLagrange(int linenumber,int aradegersayisi,int iplottype)  \n ";
s+= "public void addLagrange(int linenumber,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addB_Spline(double xi[],double yi[],int nSpline)  \n ";
s+= "public void addB_Spline(double ai[][],int nSpline)  \n ";
s+= "public void addB_Spline(double xi[],double yi[],int nSpline,int iplottype)  \n ";
s+= "public void addB_Spline(double xi[],double yi[],int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addB_Spline(int linenumber,int nSpline)  \n ";
s+= "public void addB_Spline(int linenumber,int nSpline,int iplottype)  \n ";
s+= "public void addB_Spline(int linenumber,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addSpline(double xi[],double yi[],int nSpline)  \n ";
s+= "public void addSpline(double ai[][],int nSpline)  \n ";
s+= "public void addSpline(double xi[],double yi[],int nSpline,int iplottype)  \n ";
s+= "public void addSpline(double xi[],double yi[],int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "public void addSpline(int linenumber,int nSpline)  \n ";
s+= "public void addSpline(int linenumber,int nSpline,int iplottype)  \n ";
s+= "public void addSpline(int linenumber,int aradegersayisi,int iplottype,int ir,int ig,int ib)  \n ";
s+= "  \n ";
s+= "grafik özelliklerini değiştirmek  \n ";
s+= "===========Grafik türü  =====================  \n ";
s+= "public void setPlotType(int plot_type[])	  \n ";
s+= "public void setPlotType(int dataset,int plot_no)  \n ";
s+= "public void setPlotType(int dataset,char plot_char)  \n ";
s+= "===========x ve y grid  ===========================  \n ";
s+= "public void setXgrid(int igx)  \n ";
s+= "public void setYgrid(int igy)  \n ";
s+= "public void setGrid(int igx,int igy)  \n ";
s+= "public void setXtic(int ixt)  \n ";
s+= "public void setYtic(int iyt)  \n ";
s+= "public void setXYtic(int ixt,int iyt)  \n ";
s+= "==========logaritmik grafik skalası açma ve kapama ==========  \n ";
s+= "public void setXlogScaleOn()  \n ";
s+= "public void setYlogScaleOn()  \n ";
s+= "public void setXlogScaleOff()  \n ";
s+= "public void setYlogScaleOff()  \n ";
s+= "==========renk seti==========  \n ";
s+= "public void setColor(int dataset,int ired,int igreen,int iblue)  \n ";
s+= "public void setColor(int dataset,Color c)  \n ";
s+= "public void setColor(int ired[],int igreen[],int iblue[])  \n ";
s+= "public void setColor(Color c[])  \n ";
s+= "================ fonksiyon minimum ve maksimum değerleri ===================  \n ";
s+= "public void setMinMax()  \n ";
s+= "public void setMinMax(double xi[][],double yi[][])  \n ";
s+= "public void setMinMax(double iminx,double imaxx,double iminy,double imaxy)  \n ";
s+= "=============== grafik penceresi formatlanması ==================================  \n ";
s+= " public void set_plotwindow(int width,int height,double xip,double yip,double dxp,double dyp)   \n ";
s+= " public void setabsMaxMin(int ixmin,int iymin,int idx,int idy)  \n ";
s+= "  \n ";
s+= "oluşan verinin dinamik ortamda çizilmesi  \n ";
s+= "public void plot()  \n ";
return s;}
      }

