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);
  }  
}