Unit Circle Animation 将 X 设置为 1 三次而不是 1
Unit Circle Animation setting X as 1 three times instead of 1
我正在做一个关于单位圆的项目,并决定在 Java Processing 中编写一个可视化表示,但是在测试代码时,即使它在列表中,代码仍显示为 1 的 X 值 3 次X 值一次。关于原因有什么想法吗?
代码:
float r = 300;
float[] xs = {1, sqrt(3/2), sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5, 0, .5, sqrt(2)/2, sqrt(3/2)};
float[] ys = {0, .5, sqrt(2)/2, sqrt(3)/2, 1, sqrt(3)/2, sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5};
void setup() {
size(900, 900);
background(0);
noFill();
stroke(255);
strokeWeight(4);
textAlign(CENTER, CENTER);
}
void draw() {
background(0);
translate(width / 2, height / 2);
circle(0,0,r * 2);
for (int i = 0; i < xs.length; i++) {
line(0, 0, xs[i] * r, ys[i] * r);
}
}
您得到这些错误值的原因(正如 Joop Eggen 指出的那样)是因为您在某些值中使用了整数除法:
float[] xs = { ... sqrt(3/2) ... sqrt(3/2)};
将这些更改为以下内容应该可以解决您的问题:
float[] xs = { ... sqrt((float) 3/2) ... sqrt((float) 3/2)};
其他计算都是浮点数除法,不需要特别调整。应用了这些更改的完整代码:
float r = 300;
float[] xs = {1, sqrt((float) 3/2), sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5, 0, .5, sqrt(2)/2, sqrt((float) 3/2)};
float[] ys = {0, .5, sqrt(2)/2, sqrt(3)/2, 1, sqrt(3)/2, sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5};
void setup() {
size(900, 900);
background(0);
noFill();
stroke(255);
strokeWeight(4);
textAlign(CENTER, CENTER);
}
void draw() {
background(0);
translate(width / 2, height / 2);
circle(0,0,r * 2);
for (int i = 0; i < xs.length; i++) {
line(0, 0, xs[i] * r, ys[i] * r);
}
}
我正在做一个关于单位圆的项目,并决定在 Java Processing 中编写一个可视化表示,但是在测试代码时,即使它在列表中,代码仍显示为 1 的 X 值 3 次X 值一次。关于原因有什么想法吗?
代码:
float r = 300;
float[] xs = {1, sqrt(3/2), sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5, 0, .5, sqrt(2)/2, sqrt(3/2)};
float[] ys = {0, .5, sqrt(2)/2, sqrt(3)/2, 1, sqrt(3)/2, sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5};
void setup() {
size(900, 900);
background(0);
noFill();
stroke(255);
strokeWeight(4);
textAlign(CENTER, CENTER);
}
void draw() {
background(0);
translate(width / 2, height / 2);
circle(0,0,r * 2);
for (int i = 0; i < xs.length; i++) {
line(0, 0, xs[i] * r, ys[i] * r);
}
}
您得到这些错误值的原因(正如 Joop Eggen 指出的那样)是因为您在某些值中使用了整数除法:
float[] xs = { ... sqrt(3/2) ... sqrt(3/2)};
将这些更改为以下内容应该可以解决您的问题:
float[] xs = { ... sqrt((float) 3/2) ... sqrt((float) 3/2)};
其他计算都是浮点数除法,不需要特别调整。应用了这些更改的完整代码:
float r = 300;
float[] xs = {1, sqrt((float) 3/2), sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5, 0, .5, sqrt(2)/2, sqrt((float) 3/2)};
float[] ys = {0, .5, sqrt(2)/2, sqrt(3)/2, 1, sqrt(3)/2, sqrt(2)/2, .5, 0, -.5, -sqrt(2)/2, -sqrt(3)/2, -1, -sqrt(3)/2, -sqrt(2)/2, -.5};
void setup() {
size(900, 900);
background(0);
noFill();
stroke(255);
strokeWeight(4);
textAlign(CENTER, CENTER);
}
void draw() {
background(0);
translate(width / 2, height / 2);
circle(0,0,r * 2);
for (int i = 0; i < xs.length; i++) {
line(0, 0, xs[i] * r, ys[i] * r);
}
}