実行結果
操作方法
- JARファイルを実行したら、表示されている弦の近くをクリックします。
- クリックするとそこに力が加わり、弦が振動を始めます。
- さらにクリックを続けると、どんどん力を加えることができます。
解説
ソースコード
final int fRate = 25; // framerate
final int N = 100; // number of mass
float T = 0.8; // tense
float rho = 0.03; // density of string
float d = 0.3; // distance of mass
float g = 9.8; // gravity
float[] y = new float[N];
float[] ny = new float[N]; // temporary value of y
float[] dy = new float[N]; // variation of y
float dt = 1.0/fRate;
void setup(){
frameRate(fRate);
size(500,400);
stroke(255);
// initial condition
for(int i=0;i<N;i++){
y[i] = 0.0;
dy[i] = 0.0;
}
}
void draw(){
calc();
background(0);
noFill();
beginShape();
for(int i=0;i<N;i++){
curveVertex(i*4+20, y[i]+200);
}
endShape();
}
// calculation of force
void calc(){
float _dm = 1.0/(rho*d);
for(int i=1;i<N-1;i++){
dy[i] = dy[i] + (T/d)*(y[i+1] - 2*y[i] + y[i-1])*_dm*dt*dt + g*dt*dt;
ny[i] = y[i] + dy[i];
// boundary condition
y[0] = 0.0;
y[N-1] = 0.0;
}
for(int i=0;i<N;i++){
y[i] = ny[i];
}
}
// mousePressed Event
void mousePressed(){
if(mouseX>=20 && mouseX<= 4*N + 20){
int n = round((mouseX-20)/4);
dy[n] = -4f;
}
}
最終更新:2009年01月30日 02:58