我不太确定在哪里提出这个问题(在数学和这里之间)
我尝试使用此公式绘制对数螺旋
它起作用(它在屏幕上显示螺旋),但当我改变音高(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是常数,start = -4 * PI,end = 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是常数,start = 0,end = 10)
我猜我在公式中犯了一个大错误,但我没看到一个错误。 我可以提供一个输出图片,如果这可以帮助,但我不知道如何
编辑: 我确实成功地使用它 r = a exp(θcotb)
double r = Math.pow(a,t*(1/Math.tan(b)));
但我仍然不明白为什么其他公式没有成功,这就是为什么我编辑这个问题而不是回答它。
答案 0 :(得分:0)
我的猜测是有一个四舍五入的问题正在进行中。 我假设'a'和'b'都是双打...我不得不问,因为它没有写在代码中但是假设是这种情况。如果不是那就是问题:)
接下来我会看一下i * step并确保这是你所期待的...我会认为这是可以的但是你没有把int'我'转换为双重所以如果要问问题你重新洗牌。
啊,其实我想看看'样品'。如果这是一个int,因为我会期望这会给你一个错误的结果,因为你要除以一个int,我期望它会给出一个int返回值...实际上我的1p的赌注是在它的样本声明为中间体
如果不能解决问题,您可以打印出步进值并确保它符合您的预期,如果不是此示例问题,也请检查't'是否正确计算。