【问题标题】:Rotate each element around own axis in a loop (Processing)在循环中围绕自己的轴旋转每个元素(处理)
【发布时间】:2020-11-21 18:33:17
【问题描述】:

我有一个瓷砖图案,我想围绕自己的轴旋转每个元素。 现在我的整个图案在旋转——围绕着左上角第一块瓷砖的轴线…… 如何设置旋转影响循环中的每个图块? 我用 translate() 等方法尝试过……但逻辑完全让我感到困惑——我的意思是我没有明白……

感谢您的任何帮助或想法!

int horizontal;
int vertical;

void setup() {
  size(730, 1080);
}

void draw() {
  background(0);
  fill(255);


  for (vertical = 0; vertical < 5; vertical++) {

    for (horizontal = 0; horizontal <4; horizontal++) {
      float wave = sin(radians(frameCount));
      pushMatrix();
      rectMode(CENTER);
      rotate(radians(wave*10));
      rect(182*horizontal, 216*vertical, 182, 216);
      popMatrix();
    }
  }
}

【问题讨论】:

    标签: loops rotation processing translate


    【解决方案1】:

    rotate 定义一个旋转矩阵并将当前矩阵乘以旋转矩阵。 rotate 因此导致旋转 (0, 0)。
    您必须将矩形以 (0, 0) 为中心,旋转它并将旋转的矩形移动到所需的位置 translate:

    translate(182*horizontal + 91, 216*vertical + 108);
    rotate(radians(wave*10));
    rectMode(CENTER);
    rect(0, 0, 182, 216);
    

    完整代码:

    void setup() {
        size(730, 1080);
    }
    
    void draw() {
        background(0);
        fill(255);
    
        for (int vertical = 0; vertical < 5; vertical++) {
    
            for (int horizontal = 0; horizontal <4; horizontal++) {
                float wave = sin(radians(frameCount));
                pushMatrix();
                translate(182*horizontal + 91, 216*vertical + 108);
                rotate(radians(wave*10));
                rectMode(CENTER);
                rect(0, 0, 182, 216);
                popMatrix();
            }
        }
    }
    

    【讨论】:

    • 啊!这就是诀窍!非常感谢您解释和教我逻辑!非常有帮助——非常感谢!
    • @Cyrill 谢谢。不客气。
    猜你喜欢
    • 2021-08-25
    • 2020-04-07
    • 2013-03-19
    • 2017-10-13
    • 2023-03-07
    • 2011-08-22
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多