1

我的任务是制作照片上描述的圆形和正方形图案,我需要对其进行动画处理,以使所有对象平滑地增加到四倍大小,然后缩小到原始大小,并重复此操作。我试过但我无法理解问题

{
 size(500,500); 
 background(#A5A3A3);
 noFill();
 rectMode(CENTER);
 ellipseMode(CENTER);
}
void pattern(int a, int b)
{
  
  boolean isShrinking = false;
 
 
  for(int x = 0; x <= width; x += a){
  for(int y = 0; y <= height; y += a){
  
 
   stroke(#1B08FF);
   ellipse(x,y,a,a);
   
   stroke(#FF0000);
   rect(x,y,a,a);
   
   stroke(#0BFF00);
   ellipse(x+25,y+25,a/2,a/2);
   
 if (isShrinking){a -= b;}
      else {a += b;}
    if (a == 50 || a == 200){
      isShrinking = !isShrinking ; }
   
    
    
   
  }
  }
   
}
void draw()
{
 pattern(50,1); 
} 

这就是模式需要看起来的样子

方格的圆圈

4

1 回答 1

0

太好了,你已经发布了你的尝试。

从你介绍的内容我也无法理解这个问题。如果这是一项任务,也许尝试获得更多澄清?

如果您评论您的isShrinking代码部分,您确实有一个类似于您发布的图像的绘图。

对其进行动画处理,使所有对象平滑地增加到四倍大小,然后缩小到原始大小,并重复此操作

这是否仅仅意味着缩放整个模式?

如果是这样,您可以使用正弦函数 ( sin()) 和map()函数来实现:

  1. sin(),正如参考文献所提到的,当您将一个介于 0 和 2 * PI 之间的角度传递给它时,返回一个介于 -1 和 1 之间的值(因为在处理三角函数中,函数使用弧度而不是角度的度数)

  2. 您可以使用frameCount除以小数值来模拟甚至增加的角度。(即使你绕圈多次(角度 > 2 * PI),sin()仍然会返回一个介于 -1 和 1 之间的值)

  3. map()从一个数字范围中获取单个值并将其映射到另一个。(在您的情况下,从sin()的结果 (-1,1) 到比例范围 (1,4)

这是带有上述注释的代码的调整版本:

void setup()
{
  size(500, 500, FX2D); 
  background(#A5A3A3);
  noFill();
  rectMode(CENTER);
  ellipseMode(CENTER);
}

void pattern(int a)
{

  for (int x = 0; x <= width; x += a) {
    for (int y = 0; y <= height; y += a) {


      stroke(#1B08FF);
      ellipse(x, y, a, a);

      stroke(#FF0000);
      rect(x, y, a, a);

      stroke(#0BFF00);
      ellipse(x+25, y+25, a/2, a/2);
    }
  }
}
void draw()
{
  // clear frame (previous drawings)
  background(255);
  // use the frame number as if it's an angle
  float angleInRadians = frameCount * .01;
  // map the sin of the frame based angle to the scale range
  float sinAsScale = map(sin(angleInRadians), -1, 1, 1, 4);
  // apply the scale
  scale(sinAsScale);
  // render the pattern (at current scale)
  pattern(50);
} 

(我选择FX2D渲染器是因为它在这种情况下更平滑。此外,我建议将来格式化代码。它使阅读变得更容易,而且几乎不需要任何努力(按 Ctrl+T)。从长远来看,你' 阅读代码的次数会多于编写代码的次数,尤其是在大型程序上,并且易于阅读的大量代码将为您节省大量时间和潜在的头痛。)

于 2021-11-08T22:01:26.117 回答