倒立振子






public void run(){
//スレッドによる時間進行
boolean cont=true;
st = new State();
inum=0;
while(cont){
st.Next();//次に時刻の値
xp[inum]=(int)(st.Xp*200.0);
ang[inum]=(int)(st.Ang*1000.0);
repaint();
inum++;
if(inum>=180) cont=false;
try{
Thread.sleep(100);
}
catch(Exception e){}
}
System.out.println("Thread out\n");
}
paint()でグラフ表示、drawPend()で振り子のアニメーションをします。三角印は原点を表示しています。 public void Next() {
//次の時刻の値を求める
double vu;
vu = ck1 * Ang + ck2 * dAng + ck3 * Xp + ck4 * dXp;
ddAng = ca * Ang + cc * vu;
dAng += ddAng * step;
Ang += dAng * step;
ddXp = cb * Ang + cd * vu;
dXp += ddXp * step;
Xp += dXp * step;
Time += step;
}
ソースはこちらをご覧下さい。