xxxxxxxxxx
113
let field = [];
let rez = 10;
let cols, rows;
let increment = 0.1;
function setup() {
createCanvas(400, 400, WEBGL);
cols = 1 + width / rez;
rows = 1 + height / rez;
for (let i = 0; i < cols; i++) {
let k = [];
for (let j = 0; j < rows; j++) {
k.push(floor(random(2)));
}
field.push(k);
}
}
function draw() {
translate(-width/2,-height/2);
background(20);
xoff = 0;
yoff = 0;
let vertices = [];
for (let i = 0; i < cols; i++) {
xoff += increment;
yoff = 0;
for (let j = 0; j < rows; j++) {
yoff += increment;
//stroke(field[i][j]*255);
//strokeWeight(rez*0.4);
//point(i*rez,j*rez);
if(noise(xoff, yoff, millis()/10000) > 0.5){
field[i][j] = 1;
}
else{
field[i][j] = 0;
}
}
}
for (let i = 0; i < cols - 1; i++) {
let x = i * rez; // get x value
for (let j = 0; j < rows - 1; j++) {
let y = j * rez; // get y value
// get a b c d subdiv for isolines
let a = createVector(x + rez * 0.5, y);
let b = createVector(x + rez, y + rez * 0.5);
let c = createVector(x + rez * 0.5, y + rez);
let d = createVector(x, y + rez * 0.5);
// get values (used for interpolation)
//let values = [
//field[i][j],
//field[i + 1][j],
//field[i + 1][j + 1],
//field[i][j + 1]
//]
// get edges
let edges = [
createVector(x + rez * 0.5, y + rez * 0.5),
createVector(x,y),
createVector(x + rez * 0.5, y), // 2
createVector(x + rez, y),
createVector(x + rez, y + rez * 0.5), // 4
createVector(x + rez, y + rez),
createVector(x + rez * 0.5, y + rez), // 6
createVector(x, y + rez),
createVector(x, y + rez * 0.5), // 8
]
//get state of square
let state = getState(
ceil(field[i][j]),
ceil(field[i+1][j]),
ceil(field[i+1][j+1]),
ceil(field[i][j+1]));
for (let edgeIndex of triangulationTable2D[state]) {
if (edgeIndex >= 0) {
vertices.push(createVector(edges[edgeIndex].x, edges[edgeIndex].y));
}
}
}
}
stroke(255);
fill(200);
beginShape(TRIANGLES);
for(let vertice of vertices){
vertex(vertice.x,vertice.y);
//print(vertice.x);
}
endShape();
}
function getState(a,b,c,d){
return a * 8 + b * 4 + c * 2 + d * 1;
}
function drawLine(v1, v2) {
line(v1.x, v1.y, v2.x, v2.y);
}