1

这使用一个名为 StdDraw 的库来绘制一条线。我正在尝试制作一种螺旋绘图方法,该方法采用中心坐标、要使用的线段数、最大半径和螺旋的“紧密度”(spinRate)。

到目前为止,这是我的代码:

public void spiral(double x0, double y0, double maxRadius, int 
numSegments, double spinRate) {
    double angle = 0;
    double x = x0;
    double y = y0;
    double R = maxRadius/(2*Math.PI);
    for (int i = 0; i < numSegments; ++i) {
        double x1 = x;
        double y1 = y;  
        angle += spinRate/maxRadius;
        x = x0 + R*angle*Math.cos(angle);
        y = y0 + R*angle*Math.sin(angle);
        StdDraw.line(x, y, x1, y1);

    }
}

现在它会画一个螺旋,但如果我将 spinRate 设置为 1,我会得到:

图像

如果我将 spinRate 设置为 2,我会得到:

图像

所以半径会根据 spinRate 而变化,而不是保持不变。显然,角度并没有变得更紧。

Trig 根本不是我的事,我对这个问题有点困惑。

这是我希望它看起来像的示例:

旋转速率 1:

图像

旋转速度 2:

图像

所以你看,半径是恒定的,但它是一个更紧密的螺旋。

编辑:

这是解决方案。

    public static void spiral(double x0, double y0, double maxRadius, int 
        numSegments, double spinRate) {
            double radius = 0;
            double x = x0;
            double y = y0;
            double deltaR = maxRadius/numSegments; 
            for (int i = 0; i < numSegments; ++i) {
                double x1 = x;
                double y1 = y;  
                radius += deltaR; 
                x = x0 + radius*Math.cos((2*Math.PI*i/numSegments) * spinRate);
                y = y0 + radius*Math.sin((2*Math.PI*i/numSegments) * spinRate);
                StdDraw.line(x, y, x1, y1);
            } 
    }
4

0 回答 0