2011-07-14 91 views
0

有誰知道我可以如何開始在java中繪製極座標圖並在此圖上繪製一些點?我的意思是圓圈和線條,我希望用swing之類的東西來做,而不是像Jfreechart那樣使用任何類庫。 謝謝在java中繪製極座標圖

回答

4

您可能會喜歡看Lissajous curves;下面顯示了a = 5, b = 4 (5:4)的示例。

附錄:一旦您看到如何繪製座標xy中的點,那麼您應該看看converting between polar and Cartesian coordinates

LissajousPanel

public class LissajousPanel extends JPanel { 

    private static final int SIZE = 400; 
    private GeneralPath path = new GeneralPath(); 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(SIZE, SIZE); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(
      RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 
     double dt = Math.PI/180; 
     int w = getWidth()/2; 
     int h = getHeight()/2; 
     path.reset(); 
     path.moveTo(w, h); 
     for (double t = 0; t < 2 * Math.PI; t += dt) { 
      double x = w * Math.sin(5 * t) + w; 
      double y = h * Math.sin(4 * t) + h; 
      path.lineTo(x, y); 
     } 
     g2d.setColor(Color.blue); 
     g2d.draw(path); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.add(new LissajousPanel()); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
3

Java2D是官方JDK的一部分,完美地滿足您的需求。你可以在這裏找到java doc:Java2d

-1

你會想用Java2D來繪製符合你需要的圓/多邊形。在您想要繪製的控件的public void paint(Graphics g)方法中,可以繪製到Graphics對象。各種事情可能會有所幫助的一些例子:

//Draw a polygon 
public void paint(Graphics g) 
{ 
    int xVals[] = {25, 145, 25, 145, 25}; 
    int yVals[] = {25, 25, 145, 145, 25}; 

    g.drawPolygon(xVals, yVals, xVals.length); 
} 

//Draw an ellipse/circle 
public void paint(Graphics g) 
{ 
    int xPos = 50; 
    int yPos = 50; 
    int xWidth = 100; 
    int yWidth = 100; 
    g.drawOval(xPos, yPos, xWidth, yWidth); 
} 

請記住,像drawOval,drawRect中,等電話的位置是形狀,而不是形狀的中心的左上角。如果您希望橢圓的中心位置爲50,寬度爲100,則需要將xPosyPos設置爲0.

+0

-1,永不覆蓋組件的'漆(...)'方法(除非你絕對必須的)。相反,重寫組件的'paintComponent(...)'方法。 – mre