如何限制for循环模式以保持形状?基本上,我如何用图案而不是颜色填充形状?

时间:2017-11-22 16:01:17

标签: for-loop processing shape

我正在尝试创建同心圆,这些圆圈充满了沿相反方向移动的线条(跟随鼠标)。我无法弄清楚如何只用线条填充圆圈 - 我使用了一个for循环来制作线条,并希望在圆圈半径之外将它们剪掉。基本上,我试图用线条图案填充圆圈。

这是我的代码:

float r = 0;

float startAngle;

float density;

float radius;

void setup() { 

  size(500, 500);

  background(255);

  stroke(150, 0, 150);

} 

void draw() {

  int[] s = {

    500, 325, 200, 100, 50, 25

  };

   for (int i = 0; i < 500; i = i+5) {

     line(0, i, 500, i);

     if(i > s[0]) {

       noStroke(); 

     }

  }

  translate(width/2, height/2);

  rotate(r);

  r = r + .01; 

  fill(0); 

  ellipse(0, 0, s[0], s[0]);

  fill(50); 

  ellipse(0, 0, s[1], s[1]);

  fill(100); 

  ellipse(0, 0, s[2], s[2]);

  fill(150); 

  ellipse(0, 0, s[3], s[3]);

  fill(200); 

  ellipse(0, 0, s[4], s[4]);

  fill(255); 

  ellipse(0, 0, s[5], s[5]); 

}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

一般的“我该怎么做”这类问题很难提供帮助。 Stack Overflow专为更具体的“我试过X,期望Y,但得到Z而不是”类型问题而设计。但我会尽力帮助。

我能给你的最好建议是从小做起。 Break your problem down into smaller pieces并将这些作品一次一张。

例如,为什么不从一个只显示单个圆圈的简单示例程序开始,而不是从显示多个圆圈的整个程序开始?尝试在其中显示一个模式。

与编程中的所有内容一样,有多种方法可以做到这一点。

选项1:您可以探索使用基本几何和触发来确定圆点上的点应该在哪里,然后根据这些点绘制它们。 cos()sin()函数可能会派上用场。

选项2:您还可以使用图像屏蔽技术。例如,您可以创建线条纹理,然后使用圆形蒙版来隔离这些线条的cirlce。 texture()功能或PImage#mask()功能将成为您的朋友。

尝试这些方法,看看你最喜欢哪一种。 The Processing reference是您最好的朋友:例如,heretexture()函数的引用,herePImage#mask()函数的引用。然后,如果您遇到特定步骤,您可以发布MCVE这一步,我们将从那里开始。祝你好运。