微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

椭圆不展开?

如何解决椭圆不展开?

我正在为一门艺术课进行一个处理项目,我的计划是制作一个音频可视化器,其中圆圈会从音频文件的振幅中出现。我的主要问题是我试图实现涟漪效应,其中圆圈在生成后会扩大并向外波纹向外延伸到窗口之外,但我所有的圆圈都保持原状。 这是我的绘图功能

void draw(){
  int n = 1000;
  fft.forward(song.mix);
  
  for (int i = 0; i <fft.specsize(); i++ ) {
    
    z = fft.getBand(i) * 20;
    
    if (n < 150){
      stroke(colors [(int)random(0,9)]);
      strokeWeight(random(50,300)); //bigger strokes towards the middle
      ellipse(x,y,z,z); //basic lines and shapes
      z ++;
    }
    
    else{
      stroke(colors [(int)random(0,9)]);
      strokeWeight(random(10));
      
      ellipse(x,z); //basic lines and shapes
      z ++;
    } 
    
  }

}

我不确定我哪里出错了,因为我在增加 z,所以据我所知,每个椭圆都应该展开。

解决方法

您没有看到任何扩展,因为您只是在单个绘制调用中增加 z,然后它被重置。但是为了看到扩展,z 必须在多个绘制周期内递增。您可以通过使用 if 语句而不是循环来做到这一点。请注意,draw 会不断被调用。

int i = -1;

void draw(){
  int n = 1000;
  fft.forward(song.mix);
  
  if(++i < fft.specSize()) {
    
    z = fft.getBand(i) * 20;
    
    if (n < 150){
      stroke(colors [(int)random(0,9)]);
      strokeWeight(random(50,300)); //bigger strokes towards the middle
      ellipse(x,y,z,z); //basic lines and shapes
      z ++;
    }else{
      stroke(colors [(int)random(0,9)]);
      strokeWeight(random(10));
      
      ellipse(x,z); //basic lines and shapes
      z ++;
    } 
  }
}

我还没有测试过,但这应该会在椭圆展开时重绘。

附言如果椭圆的高度和宽度相等,则可以使用 circle(x,z)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。