2013-03-10 117 views
0

你好,我對Java相當陌生,一直在這個問題上停留了一段時間,所以希望有人能夠救我。基本上我正在創建一個可以繪製方程式的程序,現在我正在測試-10和10之間的x^2。我可以在正確的位置繪製點,但我無法弄清楚如何填寫點之間的斑點,所以它看起來像一個真正的圖。用線連接點來創建折線圖

這裏是我的代碼:

import java.util.Scanner; 
import javax.swing.JFrame; 
import java.awt.*; 

class PlotGraph extends JFrame{ 


public void paint(Graphics l){ 

    l.drawLine(50, 300, 550, 300); //x axis 
    l.drawLine(300, 550, 300, 50); //y axis 
    //Orignin x = 300 y = 300 

    int xmin, xmax, y, tmin, tmax; 
    xmin =(-10); 
    xmax = 10; 
    int x_bet, y_bet; 

    while(xmin<=xmax){ 
     y = 300-(xmin*xmin); 
     l.drawLine(xmin+300, y, xmin+300, y); 

     //while(x_bet>xmin){ 
     //l.drawLine(, , ,); 
     //} 

     xmin++; 
    } 



} 

public static void main(String [] args) { 

    PlotGraph graph = new PlotGraph(); 
    graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    graph.setSize(600, 600); 
    graph.setVisible(true); 
    graph.setTitle("PlotGraph"); 

} 


} 

回答

0

也許試試這個:

int x = xmin; 
int last_y = 300-(x*x); 
for (x = xmin+1; x<=xmax; x++); 
    y = 300-(x*x); 
    l.drawLine(x-1, last_y, x, y); 
    last_y = y; 
} 

你想以前的X和Y座標和當前者之間繪製行。這就是last_y的用途。

+0

曼感謝以至於完美地工作。我還有另外一個問題,如果我想繪製正弦和餘弦函數,我必須導入哪些庫? – CodeNewbie 2013-03-10 06:03:10

+1

'java.Math'具有'sin()'和'cos()'。請記住,這些函數是弧度,而不是度數。數學包的Javadoc [這裏](http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/Math.html) – angelatlarge 2013-03-10 06:05:54

0

有幾種方法可以做到這一點。如果這是一項任務,那麼我猜你的教授正在尋找你想要的方法。在最基本的層面上,您只需畫出從最後一點到當前點的一條線。你還能怎麼做到這一點?也許是不同顏色的折線?也許用一個小數學來繪製更大的圓圈,然後通過它們運行一條線?

以下是解決特定問題的一種簡單方法。我不建議將其轉換(如果它是一項任務),但它會向您顯示基本原則。

import java.util.Scanner; 
import javax.swing.JFrame; 
import java.awt.*; 
class PlotGraph extends JFrame{ 
public void paint(Graphics l){ 

l.drawLine(50, 300, 550, 300); //x axis 
l.drawLine(300, 550, 300, 50); //y axis 

int xmin, xmax, y, tmin, tmax; 
int z = 0; 
xmin =(-10); 
xmax = 10; 
int x_bet, y_bet; 
while(xmin<=xmax){ 
    y = 300-(xmin*xmin); 
    l.drawLine(xmin+300, y, xmin+300, y); 
    if(z!=0) 
    l.drawLine(xmin+300, y, xmin+300, z); 
    z=y; 
    xmin++; 
} 
} 

public static void main(String [] args) { 
PlotGraph graph = new PlotGraph(); 
graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
graph.setSize(600, 600); 
graph.setVisible(true); 
graph.setTitle("PlotGraph"); 
} 
} 
2

另一種方法是創建一個GeneralPath,就像這樣。

import javax.swing.JFrame; 
import java.awt.*; 
import java.awt.geom.*; 

class PlotGraph extends JFrame{ 

    public void paint(Graphics l){ 

     l.drawLine(50, 300, 550, 300); //x axis 
     l.drawLine(300, 550, 300, 50); //y axis 

     int xmin, xmax, y, tmin, tmax; 
     xmin =(-10); 
     xmax = 10; 
     int x_bet, y_bet; 
     GeneralPath gp = new GeneralPath(); 

     y = 300-(xmin*xmin); 
     gp.moveTo((double)xmin+300, (double)y); 
     while(xmin<=xmax){ 
      y = 300-(xmin*xmin); 
      gp.lineTo((double)xmin+300, (double)y); 

      xmin++; 
     } 

     Graphics2D g2 = (Graphics2D)l; 
     g2.setColor(Color.RED); 
     g2.draw(gp); 
    } 

    public static void main(String [] args) { 
     PlotGraph graph = new PlotGraph(); 
     graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     graph.setSize(600, 600); 
     graph.setVisible(true); 
     graph.setTitle("PlotGraph"); 
    } 
} 

此源仍然有問題,但:

  1. GUI更新應該在美國東部時間來完成。
  2. 自定義繪畫最好在JPanel/JComponentBufferedImage顯示在JLabel
  3. 在「圖組件」應當聲明一個優選的大小,而不是設置一個大小爲幀..
+1

+1這裏有一個相關的例子[這裏]( http://stackoverflow.com/a/6697773/230513)。 – trashgod 2013-03-13 19:27:27