hikari
code:code.js
$('<p id="howto">').text('画面をタッチ').appendTo($('body'))
// 引力・斥力モデル
var num = 500;
var vx = new Array(num);
var vy = new Array(num);
var x = new Array(num);
var y = new Array(num);
var ax = new Array(num);
var ay = new Array(num);
var magnetism = 30.0; //引力の強さ マイナスにすると斥力になる。
var radius = 2 ; //描画する円の半径
var gensoku = 0.8; // 粒子の移動を減速させる
function setup(){
createCanvas(windowWidth,windowHeight);
noStroke();
fill(0);
ellipseMode(RADIUS);
background(0);
blendMode(ADD);
for(var i =0; i< num; i++){
xi = random(width);
yi = random(height);
vxi = 0;
vyi = 0;
axi = 0;
ayi = 0;
}
}
function draw(){
fill(0,0,0);
rect(0,0,width,height);
for(var i=0; i<num; i++){
var distance = dist(mouseX, mouseY, xi, yi); //dist(x1,y1,x2,y2) 2点間の距離を求める関数
//加速度は引力の中心からの距離の二乗に反比例する。
if(distance > 3){ //あまりマウスに近すぎる場合は加速度を更新しない
axi = magnetism * (mouseX - xi) / (distance * distance);
ayi = magnetism * (mouseY - yi) / (distance * distance);
}
vxi += axi; // 1フレームあたりaxだけ速度vxを増加する。
vyi += ayi; // 1フレームあたりayだけ速度vyを増加する.
vxi = vxi*gensoku;
vyi = vyi*gensoku;
xi += vxi; // 1フレームあたりvyピクセル進ませる。
yi += vyi; // 1フレームあたりvyピクセル進ませる。
var sokudo = dist(0,0,vxi,vyi); // 速度のX,Y成分から速度を求める
var r = map(sokudo, 0, 5, 0, 255); //速度に応じた色を計算
var g = map(sokudo, 0,5, 64, 255);
var b = map(sokudo, 0,5, 128, 255);
fill(r, g, b, 16);
ellipse(xi,yi,radius,radius);
}
}
run
code: hoge.js
helloworld;
#p5.js #axiom #高校生のためのクリエイティブ・プログラミング講座