猿问

在处理中围绕旋转平面绘制点时出现问题?

我正在制作一个脚本原型,以在旋转平面周围绘制等距点,而处理会产生意外的结果?


这是我的代码:


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我得到我期望的输出时points = 5 // also when points = 3 or > 4,但是当 时,我得到的输出缺少绘制点,但间距仍然正确。


为什么会发生这种情况?


神不在的星期二
浏览 106回答 1
1回答

莫回无

你旋转太多了:你不想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++) {&nbsp; rotate(TAU / points);&nbsp; ellipse(0, 100, 10, 10);}或者,保持增量角度,但然后通过使用三角学来计算放置rotate(),而不使用 来放置点:float x = 0, y = 100, nx, ny, angle;for (int i = 0; i < points; i++) {&nbsp; angle = i * TAU / points;&nbsp; nx = x * cos(a) - y * sin(a);&nbsp; ny = x * sin(a) + y * cos(a);&nbsp;&nbsp; ellipse(nx, ny, 10, 10);}
随时随地看视频慕课网APP

相关分类

Java
我要回答