id:TOKOROTEN の人あたりから紹介された。
超カッコイイよね
これは作るしかない。 式も示されているし、差分法なら解ける!!
と思ったのが運の尽き。
数学が分からん
∇ △ がわからん!(見たら思い出したけどw)
∂ってなんだっけw(おい)
とか色々と格闘をしてプログラムを組む(付録参照)
蛇足
http://d.hatena.ne.jp/sakusan_net/20080605/1212629302
id:inajob君のノートPCが最新式になってた、そしてプロジェクタで映している画像がなんか赤いウネウネしたものだった。
id:sakusan_netに夢見られたので 正夢化してみたかったというのもあるw
さすがにノートPCは買ってないけどねw
参考
付録
ソースコードはっつけておきます。
リンク先でも見れるようにしてあるので「デバッグしてください」
もしこれを参考にして何かを作った場合には うちのサイトをリンクしてもらえれば幸いです。
コア部分
これだけだと動きません。リンク先にあるNicoPanelとAppletを参考にコイツを呼び出したり、描画したりしてください。
差分法を用いて、周期的境界を利用しています。
public class Main { static final int size=256/4; static final double F=0.04; static final double k=0.06; static final double d_t=0.1; static final double d_size=0.1; double [][] u,v,tmp_u,tmp_v; public Main(){ u=new double[size][size]; v=new double[size][size]; tmp_u=new double[size][size]; tmp_v=new double[size][size]; init(); } public void init(){ for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ u[i][j]=Math.random(); v[i][j]=Math.random(); } } } public double f(double u,double v){ return u*u*v-(k)*u; } public double g(double u,double v){ return -u*u*v+F*(1.0-v); } /* public double laplace(double pre,double now,double post){ return (pre-2*now+post)/(d_size*d_size); } */ public double laplace2(double[][] map,int x,int y){ return ((map[post(x)][y]+map[pre(x)][y]+map[x][pre(y)]+map[x][post(y)]+ -4*map[x][y]))*(d_size); } public int post(int index){ int ret=index+1; if(ret>=size)ret=0; return ret; } public int pre(int index){ int ret=index-1; if(ret<0)ret=size-1; return ret; } public double next_u(int x,int y){ return d_t*(f(u[x][y],v[x][y])+laplace2(u,x,y))+u[x][y]; } public double next_v(int x,int y){ return d_t*(g(u[x][y],v[x][y])+laplace2(v,x,y))+v[x][y]; } public void toTmp(){ int x,y; for(x=0;x<size;x++){ for (y=0;y<size;y++){ tmp_u[x][y]=u[x][y]; tmp_v[x][y]=v[x][y]; } } } public void fromTmp(){ int x,y; for(x=0;x<size;x++){ for (y=0;y<size;y++){ u[x][y]=tmp_u[x][y]; v[x][y]=tmp_v[x][y]; } } } public void proc(){ int x,y; for(x=0;x<size;x++){ for (y=0;y<size;y++){ tmp_u[x][y]=next_u(x,y); tmp_v[x][y]=next_v(x,y); } } fromTmp(); } public static void main(String[] args){ Main m=new Main(); } }