牛顿第二定律的实现
//引力模拟PVector org = new PVector();PVector vel = new PVector(1, 0);PVector accf = new PVector();PVector subforce = new PVector();void setup() {size(900, 400);org = new PVector(random(0, width), random(0, height));}void draw() {background(0);display();editval();chckedge();}void editval() {PVector inpos = new PVector(mouseX, mouseY);PVector force = inpos.sub(org);float attrat = force.mag();float strength = 0.03;float limitforce = pow(2, -attrat*0.05)*strength;subforce.mult(-limitforce*10);accf.add(subforce);force.mult(limitforce);accf.add(force);vel.add(accf);org.add(vel);accf.mult(0);if (accf.mag()==0 && vel.mag() >1.0) {vel.mult(0.98);//衰减}}void display() {fill(255);noStroke();ellipse(org.x, org.y, 20, 20);}void chckedge() {if (org.x >= width || org.x <=0 || org.y >=height || org.y<= 0) {org= new PVector(random(0, width), random(0, height));}}
//在鼠标按下的位置生成粒子,并往鼠标移动的方向射出;PVector pos;PVector vel;PVector emitforce;float r;float mass;float presstime;float d;void setup() { size(900, 400); pos = new PVector(mouseX, mouseY); vel = new PVector(0, 0); emitforce = new PVector(); r = 20; mass = 10;}void draw() { background(0); speedadd(); display();}void editvalue() { emitforce = PVector.sub(new PVector(mouseX, mouseY), new PVector(pmouseX, pmouseY)); d = emitforce.mag(); float limitD = 1-pow(2, -d); emitforce.mult(limitD/(mass*0.03)); pos = new PVector(mouseX, mouseY);}void speedadd() { vel.add(emitforce); pos.add(vel); vel.mult(0); emitforce.mult(0.98); //如果不做衰减那么emitforce则会在鼠标松开后保持一个甩出去时候的值。 //vel会每帧都会累加这个值,以至于停不下来。}void display() { noStroke(); fill(255); ellipse(pos.x, pos.y, mass, mass);}//拖动鼠标蓄能void mouseDragged() { editvalue(); mass+=0.1;}void mousePressed() { mass = 10;//初始质量}
后未来数字内容创作体
Comments
Please Log in or Register to comment