java - 使用处理在双 for 循环中旋转每个单独的元素时遇到问题

标签 java 2d processing generative

因此,如果您运行此草图,您将看到一个加号网格。我想轮换每个人,但我似乎无法弄清楚。我尝试翻译,pushMatrix/popMatrix。但也许它没放在正确的地方。我现在删除了它,也许有人可以指出如何绕其自己的轴旋转每个单独的加号。

int rib;
void setup() {
  size(1200, 800);
  rib = 7;
}


void draw() {
  background(0);
  for (int i = -100; i < width+100; i = i + rib * 10) {
    for (int j = -100; j < height+100; j = j + rib * 10) {
      noStroke();
      fill(255);

      plus(i, j);
      plus(3*rib+i, 1*rib+j);
      plus(6*rib+i, 2*rib+j);
      plus(9*rib+i, 3*rib+j);
      plus(2*rib+i, 4*rib+j);
      plus(5*rib+i, 5*rib+j);
      plus(8*rib+i, 6*rib+j);
      plus(1*rib+i, 7*rib+j);
      plus(4*rib+i, 8*rib+j);
      plus(7*rib+i, 9*rib+j);
    }
  }
}

void plus(int x, int y) {
  pushMatrix();
  beginShape();
  vertex(x+0, y+0);
  vertex(x+0, y+-rib);
  vertex(x+rib, y+-rib);
  vertex(x+rib, y+0);
  vertex(x+2*rib, y+0);
  vertex(x+2*rib, y+rib);
  vertex(x+rib, y+rib);
  vertex(x+rib, y+2*rib);
  vertex(x+0, y+2*rib);
  vertex(x+0, y+rib);
  vertex(x+-rib, y+rib);
  vertex(x+-rib, y+0);
  endShape(CLOSE);
  popMatrix();
}

最佳答案

第1步:使用pushMatrix()保存当前矩阵的状态。

您需要这样做,因为您不希望轮换累积。如果将一个形状旋转 30 度,将另一个形状旋转 45 度,则您不希望第二个形状旋转 (30+45) 度。

HerepushMatrix() 的引用。

第 2 步:使用 translate() 将形状移动到需要的位置。

确保以该坐标为原点绘制形状!现在,您正在以 x,y 作为原点绘制形状,而平移后需要使用 0,0 作为原点。

Heretranslate() 的引用。

第 3 步:使用 rotate() 围绕原点旋转形状。

请记住,您现在已将 0,0“移动”到传递给 translate() 函数的 x,y!

第 4 步:绘制形状。

再次强调,记住使用 0,0 作为原点,而不是 x,y。

Hererotate() 的引用。

第 5 步:调用 popMatrix() 恢复调用 `pushMatrix()' 时的矩阵。

这会将旋转和平移恢复到正常状态,因此下一次平移和平移不会累积。

HerepopMatrix() 的引用。

第 6 步:重复。

将以上所有内容放入一个函数中,然后从 for 循环中调用它以绘制多个形状。

这是一个绘制矩形的简化示例:

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

void draw() {
  background(0);

  noStroke();
  fill(255);

  plus(100, 100);
  plus(200, 200);
}

void plus(float x, float y) {
  pushMatrix();
  translate(x, y);
  rotate(mouseX);
  rect(-20, -40, 40, 80);
  popMatrix();
}

关于java - 使用处理在双 for 循环中旋转每个单独的元素时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885722/

相关文章:

c++ - 用随机数初始化二维数组

javascript - 有没有办法通过 Javascript 操作 Processing.js 生成的代码?

java - 如何将参数从包装器 shell 脚本传递到 Java 应用程序?

java - @Transactional 无法在 Spring Boot 中与 CrudRepository 一起工作

math - 一种简单的多边形相交算法

arrays - swift 中的 2D 空数组( String 和 Bool )

linux - 在 Java 中启动 Shell 脚本并在退出时销毁所有进程

image - 在matlab中将图像分割成像素 block 的错误

java - 使用 Java 为移动应用程序创建 Paypal 钱包

java - 应用程序启动后几分钟内 GC Tenuring 阈值就会下降