www.pudn.com > onedimca.rar > 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 automata
public 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;
}
}