1. 程式人生 > >J2SE 利用Java函式畫曲線

J2SE 利用Java函式畫曲線

[java] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. publicclass Function extends JFrame {  
  2.     privatestaticfinaldouble WIDTH = Toolkit.getDefaultToolkit().getScreenSize().getWidth();  
  3.     privatestaticfinaldouble HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().getHeight();  
  4.     privatestaticfinalint INCREMENT = 
    20;  
  5.     publicstaticvoid main(String[] args) {  
  6.         new Function();  
  7.     }  
  8.     public Function() {  
  9.         this.setTitle("畫影象sinx/x");  
  10.         this.setLocation(5050);  
  11.         this.setVisible(true);  
  12.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  13.         this.getContentPane().setBackground(Color.BLUE);  
  14.         this.setExtendedState(JFrame.MAXIMIZED_BOTH);  
  15.     }  
  16.     @Override
  17.     publicvoid paint(Graphics g) {  
  18.         super.paint(g);  
  19.         Graphics2D g2d = (Graphics2D) g;  
  20.         Color source = g2d.getColor();  
  21.         g2d.setColor(Color.WHITE);  
  22.         g2d.drawString("sinx/x 的影象"5050);  
  23.         // 畫 X 軸
  24.         g2d.drawLine(INCREMENT, (int)HEIGHT/2, (int)WIDTH-INCREMENT, (int)HEIGHT/2);  
  25.         g2d.drawLine((int)WIDTH-INCREMENT, (int)HEIGHT/2, (int)WIDTH-10, (int)HEIGHT/2-5);  
  26.         g2d.drawLine((int)WIDTH-INCREMENT, (int)HEIGHT/2, (int)WIDTH-10, (int)HEIGHT/2+5);  
  27.         // 畫 Y 軸
  28.         g2d.drawLine((int)WIDTH/240, (int)WIDTH/2, (int)HEIGHT-50);  
  29.         g2d.drawLine((int)WIDTH/240, (int)WIDTH/2-1050);  
  30.         g2d.drawLine((int)WIDTH/240, (int)WIDTH/2+1050);  
  31.         // 將當前畫筆移動到中心
  32.         g2d.translate((int) WIDTH / 2, (int) HEIGHT / 2);  
  33.         // 利用GeneralPath類來畫曲線
  34.         GeneralPath gp = new GeneralPath();  
  35.         // 將GeneralPath的例項gp的畫筆移動到當前畫面的中心,但是這個點是相對於g2d畫筆的中心的
  36.         gp.moveTo(00);  
  37.         // 畫sin(x)/x 的影象
  38. //      drawSinxDX(gp, g2d);
  39.         // sin(x)的影象
  40.         drawSinx(gp, g2d);  
  41.       // cos(x)的影象
  42. //      drawCosx(gp, g2d);
  43.         // tan(x)的影象
  44. //      drawTanx(gp, g2d);
  45.         g2d.setColor(source);  
  46.     }  
  47.     privatevoid drawTanx(GeneralPath gp, Graphics2D g2d) {  
  48.         for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {  
  49.             gp.lineTo(20*i, 100*-Math.tan(i));  
  50.         }  
  51.         g2d.draw(gp);  
  52.         // 將當前畫筆以原點為中心,旋轉180度,畫奇函式(關於原點對稱)
  53.         g2d.rotate(Math.PI);  
  54.         g2d.draw(gp);  
  55.     }  
  56.     privatevoid drawCosx(GeneralPath gp, Graphics2D g2d) {  
  57.         for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {  
  58.             gp.lineTo(20*i, 100*-Math.cos(i));  
  59.         }  
  60.         g2d.draw(gp);  
  61.         // 將當前畫筆以Y中為對稱軸,畫偶函式(關於Y軸對稱)
  62.         g2d.scale(-11);  
  63.         g2d.draw(gp);  
  64.     }  
  65.     privatevoid drawSinx(GeneralPath gp, Graphics2D g2d) {  
  66.         for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {  
  67.               gp.lineTo(20*i, 100*-Math.sin(i));  
  68.             }  
  69.         g2d.draw(gp);  
  70.         g2d.rotate(Math.PI);  
  71.         g2d.draw(gp);  
  72.     }  
  73.     privatevoid drawSinxDX(GeneralPath gp, Graphics2D g) {  
  74.         for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {  
  75.              gp.lineTo(20*i, 100*-Math.sin(i)/i);  
  76.             }  
  77.         g.draw(gp);  
  78.         g.scale(-11);  
  79.         g.draw(gp);  
  80.     }