Processing 50行代码实现动态音乐分形树

 分形树的绘制运用了递归的思想。绘制分形树有两点:树枝长度和下一次画树枝时偏转的角度。

1.树枝长度:先定义树干初始长度 len, 树枝的长度每次在原来的基础上乘以0.66 ,绘出树枝的终止条件是树枝长度len <=2。

2.树枝旋转的角度:角度 theta随着音乐频率大小的改变而改变。每次绘制完树枝时,画笔右转 theta  度,(theta 的大小对应音乐频率的大小二变化)。

具体过程如下:

先定义树干初始长度 len,  每次绘制完树枝时,画笔右转 theta度,绘制下一段树枝时,树枝的长度每次在原来的基础上乘以0.66 ,绘出树枝的终止条件是树枝长度len <=2 。达到终止条件后,画笔再左转 theta 度,绘制树枝,  再右转 theta 度,这时就回到了原来的方向,退回上一个节点,再左转、绘制、右转恢复原方向......按这样的步骤一直重复下去,直到回退到根节点。


代码如下:

import ddf.minim.analysis.*;
import ddf.minim.*;
PImage img;
Minim minim;
AudioPlayer music;
FFT fft;
float theta;
float h;
void setup()
{
size(1160, 720);
img=loadImage("beiing.png");
minim = new Minim(this);
music= minim.loadFile("music.mp3", 1024);
 music.loop();
fft = new FFT(music.bufferSize(),music.sampleRate() );
}
void draw(){
background(0,0,0);
image(img,0,0 );
fft.forward(music.left);
stroke(255);
 
noFill();
 
for(int i=0;i<480;i+=2){
h=fft.getBand(i)*10;
  theta=map(h,0,width,0,PI/2);
  translate(width/2,height);
  strokeWeight(3);
  branch(160);
}
}
void branch(float len){
line(0,0,0,-len);
translate(0,-len);
len*=0.66;
if(len>2){
  pushMatrix();
  rotate(theta);
  branch(len);
  popMatrix();
  pushMatrix();
  rotate(-theta);
  branch(len);
  popMatrix();
}
}

效果如下:(因为无法上传自己录制的视频,所以给大家在视频中截了几张图附上)

 

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值