我的思想是采用极坐标,可是由于我对java了解很少,不知道可行不?
还有什么好的建议吗?非常感谢。

解决方案 »

  1.   

    public class Circle2D{
     public Circle2D(double originX, double originY, double radius)throws Exception{
       this.m_origin = new Point2D.Double(originX, originY);
       this.m_radius = radius;
       formCircle();
      }private void formCircle() throws Exception
       {
         if (m_origin != null) {
           int segNum = this.getNumSegs();
           for (int i = segNum - 1; i >= 0; i--)
             this.removeSeg(i);       double[] xy = new double[2];
           for(double i = 0; i < Math.PI*2; i+=Math.PI*2/60) {
             xy[0] = m_origin.getX() + m_radius * Math.cos(i);
             xy[1] = m_origin.getY() + m_radius * Math.sin(i);
             try {
               this.addPoint(xy[0], xy[1], MrfPathIterator.MRF_SEG_LINETO);
             }
             catch (Exception e) {
             }
           }
         }
       }}
      

  2.   

    这个问题,偶有一种算法。。
    我想这个圆是在一个坐标中吧。。那个圆心坐标和半径应该知道吧。然后吗,当然是根据角度了。n个点,那么分成n分。每个角度就是360/n,随便选一条半径与圆周的交点作为第一个点的。计算就可以喽。
    我的思路就是这样了。呵呵。至于公式,还有代码。。偶就不想了
      

  3.   

    呵呵,非常感谢大家了哈。Flowing-air的思想也是极坐标吧?
      

  4.   

    import java.awt.Graphics;import javax.swing.*;public class tttt extends JFrame {
    private int radius;
    private int number;
    private final double PI=3.141592;
    public JPanel pane= new JPanel(){
    public void paint(Graphics g)
    {
    double x;
    double y;
    g.drawOval(0,0,2*radius,2*radius);
    for(int i=0;i<number;i++)
    {
    x=radius+Math.cos((float)i/number*2*PI)*radius;
    y=radius-Math.sin((float)i/number*2*PI)*radius;
    System.out.println("i="+i+" x="+x+" y="+y);
    g.drawOval((int)x,(int)y,5,5);
    }
    };
    };

    tttt(int r,int n){
    radius=r;
    number=n;
    getContentPane().add(pane);
    }
    public static void main(String[] args) {
    tttt f= new tttt(100,10);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(300,300);
    f.show();
    }
    }可以实现画圆及画点