-
Notifications
You must be signed in to change notification settings - Fork 6
/
lattice.js
79 lines (67 loc) · 1.92 KB
/
lattice.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
69
70
71
72
73
74
75
76
77
78
79
var latticeBalls = [];
var latticeConnections = [];
var latticeDiagonals = [];
var floor;
var BALLS_PER_SIDE = 5;
var GAP_SIZE = 80;
function setup() {
var canvas = createCanvas(600, 600);
matter.init();
matter.mouseInteraction(canvas);
floor = matter.makeBarrier(width / 2, height, width, 50, {
restitution: 1
});
var halfSide = GAP_SIZE * Math.floor(BALLS_PER_SIDE / 2);
for (var i = -halfSide; i <= halfSide; i += GAP_SIZE) {
for (var j = -halfSide; j <= halfSide; j += GAP_SIZE) {
latticeBalls.push(matter.makeBall(j + width / 2, i - GAP_SIZE, 30, {
restitution: 1
}));
}
}
for (var m = 0; m < latticeBalls.length; m++) {
for (var n = 0; n < latticeBalls.length; n++) {
// horizontal supports
if (m - n === 1 &&
Math.floor(m / BALLS_PER_SIDE) === Math.floor(n / BALLS_PER_SIDE)) {
latticeConnections.push(
matter.connect(latticeBalls[m], latticeBalls[n], {
stiffness: 0.1
}));
}
// vertical supports
if (m - n === BALLS_PER_SIDE) {
latticeConnections.push(
matter.connect(latticeBalls[m], latticeBalls[n], {
stiffness: 0.1
}));
}
// diagonal supports
if ((m - n === BALLS_PER_SIDE + 1 || m - n === BALLS_PER_SIDE - 1) &&
Math.floor(m / BALLS_PER_SIDE) - Math.floor(n / BALLS_PER_SIDE) === 1) {
latticeDiagonals.push(
matter.connect(latticeBalls[m], latticeBalls[n], {
stiffness: 0.1
}));
}
}
}
}
function draw() {
background(127);
stroke(0, 255, 0);
for (var i = 0; i < latticeConnections.length; i++) {
latticeConnections[i].show();
}
stroke(255, 0, 0);
for (var j = 0; j < latticeDiagonals.length; j++) {
latticeDiagonals[j].show();
}
noStroke();
fill(255);
for (var k = 0; k < latticeBalls.length; k++) {
latticeBalls[k].show();
}
fill(0);
floor.show();
}