作者 主题: p0112b_2013_2BCD  (阅读 3968 次)

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
p0112b_2013_2BCD
« 于: 二月 08, 2013, 12:41:52 上午 »
开源了一月中旬写的一个sketch,写这个的缘由是看了openprocessing 站上Ale (http://openprocessing.org/user/12899) 的一个基于引力场的生成作品drawing_machine_10 (http://openprocessing.org/sketch/34320),然后俺重构了一个扰乱因子类,因子不可见,并会随机分配一个随机范围的引力或是斥力,此外俺把扰乱因子和粒子的初始位置分配在了一个圆周上进行生成。

此外使用的是processing 2.0b7,无法导出applet,所以以js 形式上传到了openP5 站上,降低了粒子数量,视觉效果略差。



via flickr

http://www.flickr.com/photos/ravenkwok/sets/72157632514653099/

via openprocessing

http://openprocessing.org/sketch/88624

程序代码
//Raven Kwok (aka Guo Ruiwen)
//p0112b_2013_2BCD
//http://www.flickr.com/photos/ravenkwok/sets/72157632514653099/
/*

raystain@gmail.com
ravenkwok.com
flickr.com/ravenkwok
vimeo.com/ravenkwok
weibo.com/ravenkwok
the-moor.blogbus.com

Inspired by Ale's(http://openprocessing.org/user/12899) drawingMachine_10(http://openprocessing.org/sketch/34320).
*/

ParticleController pc;

void setup(){
  size(400,400);
  smooth();
  background(255);
  pc = new ParticleController();
  pc.pAddCircle(1000,100);
  pc.iAddCircle(100,100);
}

void draw(){
  pc.update(10);
  pc.display();
}

void keyPressed(){
  if(key == 'r'){
    background(255);
    pc = new ParticleController();
    pc.pAddCircle(1000,100);
    pc.iAddCircle(100,100);
  }
}
class Interference{
 
  String mode;
  PVector mLoc;
  float range;
 
  Interference(float x, float y){
   
    mLoc = new PVector(x,y);
   
    float randFloat = random(1);
    if(randFloat<0.5) mode = "ATTRACT";
    else mode = "REJECT";
   
    range = random(0,300);
  }
}
class Particle {

  PVector mLoc;
  PVector dir;

  Particle(float x, float y) {
    mLoc = new PVector(x, y);
  }

  void update(Interference itf, float force) {
    float distance = dist(itf.mLoc.x, itf.mLoc.y, mLoc.x, mLoc.y);
    if (distance<itf.range) {
      if (itf.mode.equals("ATTRACT")) {
        dir = PVector.sub(itf.mLoc, mLoc);
      }
      else {
        dir = PVector.sub(mLoc, itf.mLoc);
      }
      dir.normalize();
      dir.mult(force/distance);
      mLoc.add(dir);
    }
  }

  void display() {
    stroke(20, 20);
    point(mLoc.x, mLoc.y);
  }
}
class ParticleController{
 
  Interference [] interferences;
  Particle [] particles;
 
  ParticleController(){
  }
 
  void pAddCircle(int amt, float rRange){
    particles = new Particle[amt];
    for(int i=0;i<amt;i++){
      float r = rRange;
      float randDegree = random(360);
      float x = cos(radians(randDegree))*r+width/2;
      float y = sin(radians(randDegree))*r+height/2;
      particles[i] = new Particle(x,y);
    }
  }
 
  void iAddCircle(int amt, float rRange){
    interferences = new Interference[amt];
    for(int i=0;i<amt;i++){
      float r = rRange;
      float randDegree = random(360);
      float x = cos(radians(randDegree))*r+width/2;
      float y = sin(radians(randDegree))*r+height/2;
      interferences[i] = new Interference(x,y);
    }
  }
 
  void update(float force){
    for(int i=0;i<interferences.length;i++){
      for(int j=0;j<particles.length;j++){
        particles[j].update(interferences[i],force);
      }
    }
  }
 
  void display(){
    for(int i=0;i<particles.length;i++){
      particles[i].display();
    }
  }
}

Contra

  • SuperManager
  • Sr. Member
  • *****
  • 帖子: 347
  • AC, game dev, new media art&tech.
    • i'm Contra
Re: p0112b_2013_2BCD
« 回复 #1 于: 二月 08, 2013, 08:42:25 上午 »
第一印象,冒出了“金猴降妖”这个词

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: p0112b_2013_2BCD
« 回复 #2 于: 二月 11, 2013, 03:57:28 上午 »
 ;D

lithium

  • Newbie
  • *
  • 帖子: 6
Re: p0112b_2013_2BCD
« 回复 #3 于: 二月 17, 2013, 04:15:23 上午 »
好漂亮!!!

Tags: