xxxxxxxxxx
103
let halfl = 10;
let canvasSide = 720;
class Line {
constructor(x, y, angle) {
this.x = x;
this.y = y;
this.angle = angle;
let on = true;
}
off() {
this.on = false;
}
on() {
this.on = true;
}
isOff() {
return !this.on;
}
render() {
if (this.on) {
line(this.x + cos(this.angle) * halfl,
this.y + sin(this.angle) * halfl,
this.x - cos(this.angle) * halfl,
this.y - sin(this.angle) * halfl);
}
}
}
function setup() {
createCanvas(canvasSide, canvasSide);
background(220);
let buffer = (canvasSide - halfl * 56) / 2;
let lines = new Array(56);
for (let i = 0; i < 56; i++) {
lines[i] = new Array(56);
for (let j = 0; j < 56; j++) {
lines[i][j] = new Line(i * halfl + buffer, j * halfl + buffer, randomGaussian(PI / 2, PI / 4));
}
}
var probability = 0.005;
var nextToX = false;
var nextToY = false;
for (let times = 0; times < 40; times++){
for (let i = 0; i < 56; i++) {
for (let j = 0; j < 56; j++) {
if (random() < probability) {
lines[i][j].off();
}
nextToX = false;
nextToY = false;
if (i!=0){
nextToX = nextToX || lines[i-1][j].isOff();
}
if (i!=55){
nextToX = nextToX || lines[i+1][j].isOff();
}
if (j!=0){
nextToY = nextToY || lines[i][j-1].isOff();
}
if (j!=55){
nextToY = nextToY || lines[i][j+1].isOff();
}
if (nextToX && probability < 3)
{
probability *= 1.2;
}
if (nextToY && probability < 3)
{
probability *= 1.2;
}
if (!(nextToY && probability < 2) && !(nextToX && probability < 2))
{
probability = 0.005;
}
}
}
}
for (let i = 0; i < 56; i++) {
for (let j = 0; j < 56; j++) {
lines[i][j].render();
}
}
}
function draw() {}