📄 totalisticca.java
字号:
package ca;// Simple Java class for visualization of cellular automata.// Juha Haataja, CSC, Finland.// E-mail: Juha.Haataja@csc.fi.import java.util.Random;// Java class for implementing 1D cellular automatapublic class TotalisticCA { private int state_nr = 2; private int radius = 1; private long rule_nr = 18; private int rule_type=0; private int[] ruletable = ca_rule(state_nr, radius, rule_nr,rule_type); // Initialization public TotalisticCA(int k, int r, long nr,int type) { if (state_nr != k || radius != r || rule_nr != nr||type!=rule_type) { if (k > 1) state_nr = k; if (r >= 0) radius = r; if (nr >= 0) rule_nr = nr; if(type>=0)rule_type=type; ruletable = ca_rule(state_nr, radius, rule_nr,rule_type); } } // Construction of the rule table private int[] ca_rule(int k, int r, long nr,int type) { int n; if(type==0){ n = (int)(Math.pow(k,2*r+1)); }else{ n=(k-1)*(2*r+1)+1; } int[] table = new int[n]; for (int i = 1; i <= n; i++) table[i-1] = rule_value(i, nr, k); return table; } // Help routine for making rule tables private int rule_value(int b, long n, int k) { if (b == 1) return (int)(n % k); else return rule_value(b-1, n/k, k); } // Generation of an initial configuration public int[] config_init(int n) { Random random_number = new Random(); int[] array = new int[n]; for (int i = 0; i < n; i++) { array[i] = (int)(state_nr*random_number.nextDouble()); if (array[i] > state_nr-1) array[i] = state_nr-1; } return array; } // Computing the next configuration public int[] ca_next(int[] config,int type) { int len = config.length; int[] res = new int[len]; for (int i = 0; i < len; i++) { res[i] = 0; for (int j = -radius; j <= radius; j++) { if (i+j >= 0 && i+j < len){ if(type==0)res[i] =res[i]*state_nr + config[i+j]; else res[i] +=config[i+j]; }else if (i+j < 0){ if(type==0)res[i] =res[i]*state_nr + config[len-i+j]; else res[i] += config[len-i+j]; }else{ if(type==0)res[i] =res[i]*state_nr + config[i+j-len]; else res[i] += config[i+j-len]; } } res[i] = ruletable[res[i]]; } return res; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -