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