我正在为程序编写代码,该程序在圆的圆周上的点之间绘制线。我使用以下方程式沿圆周设置点:


  x = center + r * cos(angle)
  
  y = center + r * sin(angle)


但是由于某种原因,我的观点无法沿着圆周平均分布。我不知道为什么。
最终看起来像这样:

java - 试图创建一个将点沿圆的圆周放置的程序,但是这些点将不会均匀分布。为什么? (java)-LMLPHP

    public void setPoints(){
        double circumference = d*Math.PI;
        int x;
        int y;
        int nPoints = 10;  //this is a variable determined by the user
        int space = (int) (circumference/nPoints);
        int start=0;
        System.out.println("space: " + space);
        int r = 20;
        int a = 506;
        int b = 356;
        int centerX = a;
        int centerY = b;

        int counter = 0;
        while (counter <= nPoints) {
            x = (int) (centerX + r * Math.cos(start));
            y = (int) (centerY + r * Math.sin(start));

            pointArray.add(new Point(x, y));
            System.out.println("---"+counter+"---");


            start += space;
            counter++;
        }
}


我究竟做错了什么?

最佳答案

更换:

int space = (int) (circumference/nPoints);
int start = 0;


带有:

double space = (2 * Math.PI) / nPoints;
double start = 0;


应该做到的。为了清楚起见,您应该将space重命名为angle或其他名称。

2 * Math.PI是一个完整的角度,以弧度表示。 (2 * Math.PI) / nPoints是您需要在两点之间应用的角度。

07-28 13:51