这使用一个名为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);
}
}