我正在尝试生成半径为1的圆的x和y值,对于x = rcos(a)和y = rsin(a),但是当我使用下面三种不同的方法时,我只得到正确的值只能手动添加它们,但我想将它们添加到循环中。
ArrayList<Double> cCoords = new ArrayList<Double>();
double pi = Math.PI;
double pi_over_two = Math.PI/2.0;
double pi_over_four = Math.PI/4.0;
double pi_over_180 = Math.PI / 180.0;
double piVals = 0;
cCoords.add(Math.cos(0));
cCoords.add(Math.sin(0));
cCoords.add(Long.valueOf(Math.round(Math.cos(pi_over_two))).doubleValue());
cCoords.add(Math.sin(pi_over_two));
cCoords.add(Math.sin(pi_over_two+pi_over_two+pi_over_two));
////////Below values are printed correctly
cCoords.add(Math.cos(pi_over_four) );
cCoords.add(Math.sin(pi_over_four));
cCoords.add(Math.cos(pi_over_four+pi_over_four));
cCoords.add((Math.sin( pi_over_four+pi_over_four)) );
cCoords.add( Math.cos(pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four+pi_over_four+pi_over_four));
cCoords.add(Math.cos(pi_over_four +pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four +pi_over_four+pi_over_four+pi_over_four));
cCoords.add(Math.cos(pi_over_four+pi_over_four + pi_over_four+pi_over_four+pi_over_four));
cCoords.add(Math.sin( pi_over_four+pi_over_four +pi_over_four+pi_over_four+pi_over_four) );
cCoords.add( Math.cos(pi_over_four+pi_over_four+pi_over_four +pi_over_four+pi_over_four+pi_over_four) );
cCoords.add(Math.sin(pi_over_four+pi_over_four+pi_over_four + pi_over_four+pi_over_four+pi_over_four));
//////////////Above values are printed correctly
for(int i = 0; i < 6; i++) { // Wrong values
cCoords.add(i, Math.cos(pi_over_four) );
cCoords.add(i+1, Math.sin(pi_over_four));
pi_over_four+=pi_over_four;
}
/////
for(int i = 0; i < 6; i++) { // x=1 coordinate gets repeated with different y values
cCoords.add( Math.cos(pi_over_four) );
cCoords.add( Math.sin(pi_over_four));
pi_over_four+=pi_over_four;
}
////
for(int i = 0; i < cCoords.size()-1; i+=2) {
System.out.print("(" + cCoords.get(i) + ",");
System.out.println(cCoords.get(i+1) + ")\n");
}
答案 0 :(得分:2)
您获取的值不正确,因为在更改变量pi_over_four
本身的值后,您在循环中插入了错误的值。
例如,在您所说的正确打印值的下面的代码段中,您已经将下一次迭代的值加倍,即2 * pi_over_four
来自pi_over_four
:
cCoords.add(Math.cos(pi_over_four));
cCoords.add(Math.sin(pi_over_four));
cCoords.add(Math.cos(pi_over_four + pi_over_four));
cCoords.add(Math.sin(pi_over_four + pi_over_four));
在下一次迭代中,它变为3 * pi_over_four
:
cCoords.add(Math.cos(pi_over_four + pi_over_four + pi_over_four));
cCoords.add(Math.sin(pi_over_four + pi_over_four + pi_over_four));
请注意,您在此处不会更改变量pi_over_four
的值。您只是在执行n * pi_over_four
,然后将其存储回列表中。
但是如果你仔细看到你的循环,你就会改变pi_over_four
本身的值,这是错误的。你应该做的事情是这样的:
for(int i = 0; i < 6; i++) {
cCoords.add(i, Math.cos((i + 1) * pi_over_four));
cCoords.add(i+1, Math.sin((i + 1) * pi_over_four));
}
答案 1 :(得分:1)
pi_over_four
都在变化,所以实际上,每次将它乘以2 ^ x而不是将其乘以2,其中x是i + 1。想象一下,在第一个循环中,pi_over_four
等于pi / 4,在第二个循环上它等于pi / 2,但是你将pi / 2加到pi / 2而不是pi / 4,从而产生第三个循环它等于pi。将新的pi_over_four
存储在另一个变量中以解决此问题。