// loi normale.java - jpq - 10/10/99 - 14/12/99 - 30/03/07 import java.awt.event.* ; import java.awt.* ; import java.applet.* ; import geo.* ; public class loinormale extends java.applet.Applet implements MouseListener, MouseMotionListener, ActionListener { Image img ; Graphics g ; int X, Y, Xp, Yp ; Repere R ; Droite xpx ; pt M, N ; PointSurDroite A, B ; pointlibre O, I ; Segment S ; gauss cf ; int modepaint = -1 ; Button ok ; TextField ta, tb, tarr ; int arrond ; double darrond ; //////////////////////////////////////////////////////////////////////////////// private void ajoutLabel (Font f, String s) { Label lbl = new Label (s); lbl.setFont (f) ; add (lbl) ; } public void init () { setBackground (Color.white) ; modepaint = 1 ; img = createImage (getSize().width, getSize().height) ; g = img.getGraphics () ; addMouseMotionListener (this) ; addMouseListener (this) ; Font f = new Font ("Arial", Font.PLAIN, 10) ; ajoutLabel (f, "a ="); add (ta = new TextField ("0.5", 4)) ; ta.setFont (f) ; ajoutLabel (f, "b =") ; add (tb = new TextField ("1.0", 4)) ; tb.setFont (f) ; ajoutLabel (f, " déc:") ; add (tarr = new TextField ("2", 1)) ; tarr.setFont (f) ; arrond = 2 ; darrond = 100.0 ; add (ok = new Button ("Ok")) ; ok.setFont (f) ; ok.addActionListener (this) ; R = new Repere (getSize().width / 2, getSize().height - 20, getSize().width, getSize().height, 50, 100) ; O = new pointlibre (0.0, 0.0, "O", R) ; xpx = new Droite (0.0, 1.0, 0.0, "", R) ; A = new PointSurDroite (0.5, 0.0, xpx, "a", R) ; B = new PointSurDroite (1.0, 0.0, xpx, "b", R) ; I = new pointlibre (1.0, 1.0, "I", R) ; cf = new gauss ("", R) ; M = new pt ("", R) ; N = new pt ("", R) ; S = new Segment ("", R) ; } public void update (Graphics g1) { paint (g1); } private String sarrondi (double d) { if (arrond >= 0) d = Math.floor (d * darrond) / darrond ; return Double.toString (d) ; } public void paint (Graphics g1) { Font f = new Font ("Arial", Font.PLAIN, 10); g.setFont (f); g.setColor (getBackground ()); g.fillRect (0, 0, R.XMAX, R.YMAX) ; if (modepaint == 0) { if ((O.deplace) || (I.deplace)) { if (O.deplace) R.Repere (R.Iabs (O.x), R.Iord (O.y), getSize().width, getSize().height, R.unitex, R.unitey) ; else { double Ix = I.x ; double Iy = I.y ; if ((Ix > 0.0) && (Iy > 0.0)) R.Repere (R.X0, R.Y0, getSize().width, getSize().height, (double) (R.Iabs (Ix) - R.X0), (double) (R.Y0 - R.Iord (Iy))) ; } } O.point (0.0, 0.0) ; I.point (1.0, 1.0) ; A.point () ; B.point () ; ta.setText (sarrondi (A.x)) ; tb.setText (sarrondi (B.x)) ; } g.setColor (Color.black) ; if (modepaint == 1) if (X > 0) { g.drawString ("point mobile", X, Y) ; Xp = X ; Yp = Y ; X = -1 ; } g.setColor (Color.green) ; int Xdeb = (A.X <= B.X) ? A.X : B.X ; int Xfin = (A.X <= B.X) ? B.X : A.X ; if (Xdeb < 0) Xdeb = 0 ; if (Xfin > getSize().width) Xfin = getSize().width ; for (int X = Xdeb ; X < Xfin ; X ++) { double abscisse = R.Abs (X) ; M.point (abscisse, 0.0) ; N.point (abscisse, cf.image (abscisse)) ; S.Segment (M, N) ; S.trace (g) ; } g.setColor (Color.red) ; R.trace (g) ; O.trace (g) ; I.trace (g) ; A.trace (g) ; B.trace (g) ; g.setColor (Color.blue) ; cf.trace (g) ; g.setColor (Color.black) ; R.cadre (g) ; double x1 = (A.x <= B.x) ? A.x : B.x ; x1 = cf.integre (x1) ; double x3 = (A.x <= B.x) ? B.x : A.x ; x3 = cf.integre (- x3) ; g.drawString ("Probas : " + sarrondi (x1) + " " + sarrondi (1.0 - x1 - x3) + " " + sarrondi (x3), 10, getSize().height - 10) ; g1.drawImage (img, 0, 0, this) ; } public void mousePressed (MouseEvent e) { e.consume () ; if (O.zone (e.getX (), e.getY ()) || A.zone (e.getX (), e.getY ()) || I.zone (e.getX (), e.getY ()) || B.zone (e.getX (), e.getY ())) { modepaint = 0 ; X = -1 ; } } public void mouseDragged (MouseEvent e) { e.consume () ; O.bouge (e.getX (), e.getY ()) ; A.bouge (e.getX (), e.getY ()) ; B.bouge (e.getX (), e.getY ()) ; I.bouge (e.getX (), e.getY ()) ; repaint () ; } public void mouseReleased (MouseEvent e) { e.consume () ; O.deplace = A.deplace = B.deplace = I.deplace = false ; modepaint = 1 ; } public void mouseMoved (MouseEvent e) { e.consume () ; if (modepaint == 1) { if (O.zone (e.getX (), e.getY ()) || A.zone (e.getX (), e.getY ()) || I.zone (e.getX (), e.getY ()) || B.zone (e.getX (), e.getY ())) { this.X = e.getX () + 2 ; this.Y = e.getY () + 8 ; O.deplace = A.deplace = B.deplace = I.deplace = false ; } repaint () ; } } public void mouseClicked (MouseEvent e) { } public void mouseEntered (MouseEvent e) { } public void mouseExited (MouseEvent e) { } public void actionPerformed (ActionEvent e) { if (e.getSource () == ok) { try { A.x = new Double(ta.getText()).doubleValue() ; } catch (NumberFormatException nfe) { } try { B.x = new Double(tb.getText()).doubleValue() ; } catch (NumberFormatException nfe) { } try { arrond = Integer.parseInt (tarr.getText ()) ; } catch (NumberFormatException nfe) { } tarr.setText (Integer.toString (arrond)) ; if (arrond >= 0) darrond = Math.pow (10.0, arrond) ; modepaint = 0 ; repaint () ; } } public String getAppletInfo () { return "loinormale par j.-p. Quelen" ; } }