アットウィキロゴ

stick1

int fRate = 20;
float dt = 1.0/(float)fRate;
 
float E = 1.0; //Young's modulus [Pa]
float dm = 0.01; // mass [kg]
final int N = 100; //number of section
 
float[] e = new float[N]; //distortions(of x)
float[] e_temp = new float[N]; //distortions(of x)
float[] de = new float[N]; //distortions(of x)
 
void setup(){
  frameRate(fRate);
  size(500,200);
  noStroke();
 
  //initial condition
  for(int i=0;i<N;i++){
    e[i] = 0;
    de[i] = 0;
    e_temp[i] = 0;
  }
}
 
void draw(){
  calc();
 
  background(255);
 
  for(int i=0;i<N;i++){
    fill(e[i]*100+100,50,20);
    rect(i*4 + 20,100,4,8);
  }
}
 
// calculation of powers
void calc(){
  for(int i=1;i<N-1;i++){
    de[i] = de[i] + (e[i-1] + e[i+1] - 2*e[i])*E*dt*dt/dm;
    e_temp[i] = e[i] + de[i];
  }
 
  for(int i=0;i<N;i++){
    e[i] = e_temp[i];
  }
 
  //boundary condition
  e[0] = e[1];
  e[N-1] = e[N-2];
}
 
// mousePressed Event
void mousePressed(){
  if(mouseX>=20 && mouseX<= 4*N + 20){
    int n = round((mouseX-20)/4);
    e[n] = 1.0;
  }
}
 
最終更新:2009年01月31日 14:35
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。