-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrid.js
68 lines (53 loc) · 1.7 KB
/
Grid.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Grid class
function Grid(LX, LY, start_a, start_b, seed_width, seed_height) {
this.grid = [];
// Weights for Laplacian (3x3 convolution)
var cent_weight = -1.0;
var side_weight = 0.2;
var diag_weight = 0.05;
// Initialise grid
for (var x = 0; x < LX; x++){
this.grid[x] = [];
for (var y = 0; y < LY; y++){
this.grid[x][y] = {a: start_a, b: start_b, add: false}
}
}
// Seed the grid with a patch of b
for (var i = floor((LX-seed_width)/2); i < floor((LX+seed_width)/2); i++){
for (var j = floor((LY-seed_height)/2); j < floor((LY+seed_height)/2); j++){
this.grid[i][j] = {a: 0, b: 1, add: false};
}
}
// Laplacian operator (3x3 convolution)
this.laplacian = function(x, y, param){
var grid = this.grid;
var left = this.find_left(x);
var right = this.find_right(x);
var up = this.find_up(y);
var down = this.find_down(y);
var delta_param = 0;
delta_param += cent_weight * grid[x][y][param];
delta_param += side_weight * grid[x][up][param];
delta_param += side_weight * grid[x][down][param];
delta_param += side_weight * grid[left][y][param];
delta_param += side_weight * grid[right][y][param];
delta_param += diag_weight * grid[left][up][param];
delta_param += diag_weight * grid[left][down][param];
delta_param += diag_weight * grid[right][up][param];
delta_param += diag_weight * grid[right][down][param];
return delta_param
}
// Helper functions to find neighbouring coordinates with periodic BCs
this.find_left = function(x){
return (x == 0 ? LX-1 : x-1)
}
this.find_right = function(x){
return (x == LX-1 ? 0 : x+1)
}
this.find_up = function(y){
return (y == 0 ? LY-1 : y-1)
}
this.find_down = function(y){
return (y == LY-1 ? 0 : y+1)
}
}