/* * @(#)Graph.java 1.9 99/08/04 * MODIFS PYL juillet Aout 2005!!!!!!!!!! * www.lmm.jussieu.fr/~lagree + py@cccr.jussieu.fr * * This software is designed and intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear facility. */ //javac guiSAGv1.java Kul.java kolor.java tridiag.java;java guiSAGv1 //javac guiSAGv1.java Kul.java kolor.java tridiag.java; open index.html import java.util.*; import java.awt.*; import java.applet.Applet; import java.awt.event.*; import javax.swing.*; import java.io.*; class GraphPanel extends Panel implements Runnable, MouseListener { guiSAGv1 graph; Kul kkul=new Kul(); public double dt0=10.0; Thread relaxer; public GraphPanel (){ } GraphPanel(guiSAGv1 graph) { this.graph = graph; addMouseListener(this); } void initout() { System.out.println("init t=" + kkul.t +" ....................... dt =" +dt0); kkul.start(); } public void sauveparam() { String texte = "#OK a poursuivre!"; System.out.println("sauf" ); try{ FileOutputStream filename= new FileOutputStream("xyz.dat"); PrintStream ffile = new PrintStream(filename); for (int i = kkul.n/2; i <= kkul.n/2; i++) { for (int j = 0; j <= kkul.n; j++) { ffile.println(i*kkul.dx + " "+ j*kkul.dy + " " + kkul.T[i][j]); } ffile.println(" " );} FileOutputStream filenameF= new FileOutputStream("xy.dat"); PrintStream ffileF = new PrintStream(filenameF); for (int i = 1; i < kkul.n; i++) { ffileF.println(i*kkul.dx + " " + kkul.T[i][0] + " " + (kkul.qw[i])); } } catch (IOException Ex) {System.out.println(Ex.getMessage());} } public void run() { Thread me = Thread.currentThread(); while (relaxer == me) { relax(); try { Thread.sleep(200); } catch (InterruptedException e) { break; } } } synchronized void relax() { repaint(); } Image offscreen; Dimension offscreensize; Graphics offgraphics; public synchronized void update(Graphics g) { Dimension d = getSize(); if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) { offscreen = createImage(d.width, d.height); offscreensize = d; if (offgraphics != null) { offgraphics.dispose(); } offgraphics = offscreen.getGraphics(); offgraphics.setFont(getFont()); } offgraphics.setColor(getBackground()); offgraphics.fillRect(0, 0, d.width, d.height); offgraphics.setColor(Color.black) ; offgraphics.drawLine(d.width/10, d.height*9/10,(9*d.width)/10 , d.height*9/10); offgraphics.drawLine(d.width/10, d.height*9/10,d.width/10 , d.height/10); offgraphics.drawLine((9*d.width)/10, d.height*9/10,(9*d.width)/10 , d.height*1/10); offgraphics.drawLine(d.width/10, d.height*1/10,(9*d.width)/10, d.height*1/10); offgraphics.drawString("x " , ((int)( 9.5*d.width/10)), ((int) (d.height*9.5/10))); offgraphics.drawString("log10 err.max DeltaN(x,y,t="+(((int)(kkul.t*1000))/1000.)+")= "+ kkul.erreur + " ", d.width/2, d.height/11); offgraphics.drawString(" champ de perturbation R=" + kkul.qw[1] + " ("+kkul.T[1][0]+")", d.width/11, d.height/22); offgraphics.setColor(Color.red) ; for (int i = 1 ; i <= kkul.n ; i++) { // offgraphics.drawLine(d.width/4+(i-1)*d.width/kkul.n/2, d.height*8/10-(int)(d.height*kkul.T[i-1]/2), // d.width/4+ i* d.width/kkul.n/2, d.height*8/10-(int)(d.height*kkul.T[ i ]/2)); } double max=0.00000000001,val; for (int i = 0 ; i <= kkul.n ; i++) { for (int j = 0 ; j <= kkul.n ; j++) { val=(kkul.T[i][j]-kkul.exacte(j*kkul.dy)); if(max64){naff=64;in=kkul.n/64;} for (int i = 0 ; i <= naff ; i++) { for (int j = 0 ; j <= naff ; j++) { offgraphics.setColor(kolor.code((kkul.T[in*i][in*j]-kkul.exacte(in*j*kkul.dy))/max)); offgraphics.fillRect(d.width/10+(i)*d.width/naff*8/10, d.height*9/10-(int)(j*d.height*8/(naff*10)), (1+d.width*8/(naff*10)), (1+ d.height*8/(naff*10))); }} offgraphics.setColor(Color.black) ; for (int i = 2 ; i < kkul.n ; i++) { offgraphics.drawLine(d.width/10+(i-1)*d.width/kkul.n*8/10, d.height*9/10-(int)(kkul.qw[i-1]*d.height/4), d.width/10+(i)*d.width/kkul.n*8/10, d.height*9/10-(int)(kkul.qw[i]*d.height/4));} offgraphics.drawLine(d.width/10+(1-1)*d.width/kkul.n*8/10, d.height*9/10-(int)(1*d.height/4), d.width/10+d.width*8/10, d.height*9/10-(int)(1*d.height/4)); offgraphics.drawLine(d.width/10, d.height*9/10,(9*d.width)/10 , d.height*9/10); offgraphics.drawLine(d.width/10, d.height*9/10,d.width/10 , d.height/10); offgraphics.drawLine((9*d.width)/10, d.height*9/10,(9*d.width)/10 , d.height*1/10); offgraphics.drawLine(d.width/10, d.height*1/10,(9*d.width)/10, d.height*1/10); offgraphics.drawString("x " , ((int)( 9.5*d.width/10)), ((int) (d.height*9.5/10))); offgraphics.drawString("N(x,y,t="+(((int)(kkul.t*1000))/1000.)+")", d.width/11, d.height/11); g.drawImage(offscreen, 0, 0, null); } //1.1 event handling public void mouseClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void start() { relaxer = new Thread(this); relaxer.start(); } public void stop() { relaxer = null; } } public class guiSAGv1 extends Applet implements ActionListener, ItemListener { GraphPanel panel; Panel controlPanel; JButton raz = new JButton("RAZ"); JButton calcul = new JButton("Calcul"); JButton pause = new JButton("Pause"); JButton kit = new JButton("Quitte"); //JSlider sliderR = new JSlider(JSlider.HORIZONTAL, 0, 250, 180); JLabel lab = new JLabel("gros coucou rouge
et ligne en italique gras ", JLabel.CENTER) ; JTextField saizie= new JTextField ("10.0"); Choice choix = new Choice(); JLabel labo1 = new JLabel(" ", JLabel.CENTER) ; JTextField saizio1= new JTextField ("1.000"); JLabel labo2 = new JLabel(" ", JLabel.CENTER) ; JTextField saizio2= new JTextField (".5000"); JLabel labo3 = new JLabel(" ", JLabel.CENTER) ; JTextField saizio3= new JTextField ("1.000"); JLabel labo4 = new JLabel(" ", JLabel.CENTER) ; JTextField saizio4= new JTextField ("7.000"); public void init() { setLayout(new BorderLayout()); panel = new GraphPanel(this); add("Center", panel); controlPanel = new Panel(); add("South", controlPanel); //controlPanel.add(sliderR); controlPanel.add(lab) ; lab.setText("dt=") ; controlPanel.add(saizie); raz.setLocation(10,10);raz.setSize(220,23); controlPanel.add(raz); raz.addActionListener(this); controlPanel.add(calcul); calcul.addActionListener(this); controlPanel.add(pause); pause.addActionListener(this); String champ="T imp...."; controlPanel.add(labo1) ; labo1.setText(champ) ; controlPanel.add(saizio1); controlPanel.add(labo2) ; labo2.setText("wo=") ; controlPanel.add(saizio2); controlPanel.add(labo3) ; labo3.setText("wm=") ; controlPanel.add(saizio3); controlPanel.add(labo4) ; labo4.setText("L=") ; controlPanel.add(saizio4); controlPanel.add(new JLabel("CL", Label.RIGHT)); choix.addItemListener(this); controlPanel.add(choix); /* choix.addItem("T(x,0)=0 T(1,y)=0 T(x,1)=0 T(0,y)=0");//0 choix.addItem("T(x,0)=1 T(1,y)=0 T(x,1)=0 T(0,y)=0"); choix.addItem("T(x,0)=0 T(1,y)=1 T(x,1)=0 T(0,y)=0"); choix.addItem("T(x,0)=0 T(1,y)=0 T(x,1)=1 T(0,y)=0");//3 choix.addItem("T(0)=1, T'(1)=0 "); choix.addItem("T(0)=0, T'(1)=0 "); choix.addItem("T(0)=sin(om t),T(1)=0 ");//6 choix.addItem("T(0)=sin(om t),T'(1)=0 "); choix.addItem("T'(0)=-q, T(1)=0 "); choix.addItem("T'(0)=-q, T'(1)=0 ");//9 choix.addItem("Bi T'(x,0)=T(x,0), T(autres bords)=1");*/ choix.addItem("N'(x,0)=hN(x,0),N(x,H)=1,N'(0,y)=0,N'(1,y)=0"); choix.addItem("N'(x,0)=hN(x,0),N(x,H)=1,N'(0,y)=0,N(1,y)=1"); controlPanel.add(kit); kit.addActionListener(this); panel.initout(); } public void destroy() { remove(panel); remove(controlPanel); } public void start() { razz(); panel.start(); } public void stop() { panel.stop(); } public void razz() { panel.kkul.prems(); synchronized (panel.kkul) { panel.kkul.pleaseWait = true;} change_it(); System.out.println("Init" ); } public void actionPerformed(ActionEvent e) { Object src = e.getSource(); if (src == raz) { razz(); System.out.println("RAZ, t=" + panel.kkul.t); return; } if (src == calcul) { String ch=saizie.getText(); double z =Double.parseDouble(ch); System.out.println("calcul, t=" + panel.kkul.t + "................dt =" + z ); panel.kkul.setdt(z); change_it(); synchronized (panel.kkul) { panel.kkul.pleaseWait = false; panel.kkul.notify();} return; } if (src == pause) { synchronized (panel.kkul) { panel.kkul.pleaseWait = true;} panel.sauveparam(); } if (src == kit) { destroy(); System.out.println("kenavo"); System.exit(0) ; } } public void itemStateChanged(ItemEvent e) { change_it(); } public void change_it(){ int ined=choix.getSelectedIndex(); String ch=saizie.getText(); double z =Double.parseDouble(ch); ch=saizio1.getText(); double z1 =Double.parseDouble(ch); ch=saizio2.getText(); double z2 =Double.parseDouble(ch); ch=saizio3.getText(); double z3 =Double.parseDouble(ch); ch=saizio4.getText(); double z4 =Double.parseDouble(ch); System.out.println("param " + z1 ); panel.kkul.wo=z2; panel.kkul.wm=z3; panel.kkul.Lx=z4; /*if (ined==0 ){panel.kkul.cl0000(); labo.setText("T imp....") ;} if (ined==1 ){panel.kkul.cl1000(); labo.setText("T imp....") ;} if (ined==2 ){panel.kkul.cl0100(); labo.setText("T imp....") ;} if (ined==3 ){panel.kkul.cl0010(); labo.setText("T imp....") ;} if (ined==4 ){panel.kkul.cl1s(); labo.setText("T imp.sym") ;} if (ined==5 ){panel.kkul.cl0s(); labo.setText("T imp.sym") ;} if (ined==6 ){panel.kkul.omega=z;panel.kkul.clt0(); labo.setText("omega= ");} if (ined==7 ){panel.kkul.omega=z;panel.kkul.clts(); labo.setText("omega= ");} if (ined==8 ){panel.kkul.q=z; panel.kkul.clq1(); labo.setText("q= ") ;} if (ined==9 ){panel.kkul.q=z; panel.kkul.clqs(); labo.setText("q= ") ;} if (ined==10){panel.kkul.Bi=z; panel.kkul.clB1(); labo.setText("Bi= ") ;}*/ if (ined==1){panel.kkul.h=z1; panel.kkul.clB(); labo1.setText("h=") ;} if (ined==0){panel.kkul.h=z1; panel.kkul.clBqs(); labo1.setText("h=") ;} } /////////////////////////////////////////////////////////// public static void main(String args[]) { JFrame f = new JFrame("guiSAG par PYL"); guiSAGv1 guiSAG = new guiSAGv1(); // System.out.println(args[]); guiSAG.init(); guiSAG.start(); f.getContentPane().add(guiSAG); f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE ) ; f.setSize(1124,700); f.setLocation(10, 10); f.show(); } public String getAppletInfo() { return "Calcul interactif par PYL. \n 'java guiGraph' \nou applet."; } }