gpt4 book ai didi

java - 在 Processing 中围绕旋转平面绘制点时出现问题?

转载 作者:行者123 更新时间:2023-11-30 06:40:37 24 4
gpt4 key购买 nike

我正在制作一个脚本原型(prototype),以围绕旋转平面绘制等距点,但 Processing 产生了意想不到的结果?


这是我的代码:

int WHITE = 255;
int BLACK = 0;

void setup() {
size(500, 500);
}

void draw() {
background(WHITE);
translate(width/2, height/2); // move origin to center of window

// center ellipse
noStroke();
fill(255, 0, 0);
ellipse(0, 0, 10, 10); // center point, red

// satellite ellipses
fill(BLACK);
int points = 4;
for (int i = 0; i < points; i++) {
rotate(i * (TWO_PI / points));
ellipse(0, 100, 10, 10); // after plane rotation, plot point of size(10, 10), 100 points above y axis
}
}

points = 4 我得到 output我希望,但是当 points = 5//也当 points = 3 or > 4 时,我得到一个 output缺少标绘点但仍正确间隔。

为什么会这样?

最佳答案

你旋转太多了:你不想在每次迭代时都旋转 i * angle,因为如果我们这样做,我们最终会旋转太多以至于点最终会重叠。例如,按原样使用代码,我们希望将 3 个点放置在 0、120 和 240 度(或 120、240、360)处。但事实并非如此:

  • 当 i=0 时,我们旋转 0 度。到目前为止,一切都很好。
  • 当 i=1 时,我们在 0 的顶部旋转 120 度。仍然很好。
  • 当 i=2 时,我们在 120 度的基础上旋转 240 度。120 度太远了!

这显然不是我们想要的,所以只需旋转固定角度 TAU/points,事情就会按预期进行:

for (int i = 0; i < points; i++) {
rotate(TAU / points);
ellipse(0, 100, 10, 10);
}

或者,保持递增角度,但随后不使用 rotate() 放置点,而是使用三角函数计算位置:

float x = 0, y = 100, nx, ny, angle;
for (int i = 0; i < points; i++) {
angle = i * TAU / points;
nx = x * cos(a) - y * sin(a);
ny = x * sin(a) + y * cos(a);
ellipse(nx, ny, 10, 10);
}

关于java - 在 Processing 中围绕旋转平面绘制点时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57735366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com