为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2023-06-28 15:20:14
我正在制作一个脚本原型,以在旋转平面周围绘制等距点,而处理会产生意外的结果?这是我的代码: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,但是当 时,我得到的输出缺少绘制点,但间距仍然正确。为什么会发生这种情况?
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

你旋转太多了:你不想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);

}


查看完整回答
反对 回复 2023-06-28
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信