0

我不太确定在哪里问这个问题(在数学和这里之间)

我尝试使用此公式绘制对数螺旋

在此处输入图像描述

它可以工作(它在屏幕上显示一个螺旋),但是当我改变螺距(a)时,螺旋不会改变他的螺距,只有旋转和大小(并且将 a 设置为 1 应该形成一个圆圈,但它不会)

我试过那些:

double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double t = start+i*step;
            coordinates[i-1][0] =  a * Math.pow(Math.E,b*t) * Math.cos(t);
            coordinates[i-1][1] = a * Math.pow(Math.E,b*t) * Math.sin(t);
}

(a 和 b 是常数,开始 = -4*PI,结束 = 4*PI)

    double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double r = start+i*step;
        double t = (1/b)*Math.log(r/a);
            coordinates[i-1][0] = r* Math.cos(t);
            coordinates[i-1][1] = r* Math.sin(t);
}

(a 和 b 是常数,开始 = 0,结束 = 10)

我猜我在公式中犯了一个大错误,但我没有看到其中一个。如果有帮助,我可以提供输出图片,但我不知道如何

编辑:我确实成功地使用 r = a exp(θ cot b) 使它工作

    double r = Math.pow(a,t*(1/Math.tan(b)));

但我仍然不明白为什么其他公式没有成功,这就是我编辑这个问题而不是回答它的原因。

4

1 回答 1

0

我的猜测是有一个四舍五入的问题。我假设'a'和'b'都是双打......我不得不问,因为它没有写在代码中,但假设是这种情况。如果不是那将是问题:)

接下来,我将查看 i*step 并确保这是您所期望的...我原以为这没问题,但是您没有将 int 'i' 转换为 double ,因此如果您重新洗牌,则会提出问题.

啊,实际上我想看的是“样本”。如果这是我所期望的 int,那么这会给您错误的 step 结果,因为您要除以一个 int ,我希望它会给出一个 int 返回值......实际上我的 1p 赌注是在它的样本上声明为诠释。

如果这不能解决问题,您可以打印出步长值并确保它是您所期望的,如果不是这个示例问题,还检查“t”是否正确计算。

于 2013-01-21T17:17:28.190 回答