xxxxxxxxxx
//let colors = ['#ff0000', '#00ff00', '#0000ff'];
let colors = ["#ff0000","#feb30f","#0aa4f7","#000000","#ffffff"];
let PALETTE;
let nPoints = 200;
let vertices = new Array(nPoints);
let triangles;
let borde = -200;
function setup() {
createCanvas(1000,1000);
rectMode(CENTER);
noLoop();
//smooth(5);
}
function draw()
{
fill(0);
rect(width/2,height/2,width,height);
generatePoints();
triangulate();
}
// generate random points
function generatePoints() {
let i = 0;
while (i < nPoints)
{
let x = random(borde,width-borde);
let y = random(borde,height-borde);
vertices[i] = [x,y];
i++;
}
triangles = Delaunay.triangulate(vertices);
}
// delaunay triangulation goes wrong
function triangulate() {
let t = floor(random(100,150));
addBlur();
curveTightness(3);
for(i = triangles.length; i; )
{
--i;
let p1X = vertices[triangles[i]][0];
let p1Y = vertices[triangles[i]][1];
vertex(p1X,p1Y);
--i;
let p2X = vertices[triangles[i]][0];
let p2Y = vertices[triangles[i]][1];
vertex(p2X,p2Y);
--i;
let p3X = vertices[triangles[i]][0];
let p3Y = vertices[triangles[i]][1];
let centroidX = floor((p1X + p2X + p3X)/3.0);
let centroidY = floor((p1Y + p2Y + p3Y)/3.0);
PALETTE = shuffle(colors, true);
PALETTE = PALETTE.slice(0, 3);
patternColors(shuffle(PALETTE));
pattern(randPattern(t));
patternAngle(random(0,2*PI));
beginShapePattern();
curveVertexPattern(p1X,p1Y);
curveVertexPattern(p2X,p2Y);
curveVertexPattern(p3X,p3Y);
endShapePattern(CLOSE);
noFill();
stroke(255);
strokeWeight(4);
beginShape();
curveVertex(p1X,p1Y);
curveVertex(p2X,p2Y);
curveVertex(p3X,p3Y);
endShape(CLOSE);
}
}
function addBlur()
{
drawingContext.shadowOffsetX = -1;
drawingContext.shadowOffsetY = -1;
drawingContext.shadowBlur = 5;
drawingContext.shadowColor = 'black';
}
// based on https://openprocessing.org/sketch/1278485
function randPattern(t)
{
const ptArr = [
PTN.stripe(t / int(random(6, 12))),
PTN.stripePolygon(int(random(3, 7)), int(random(6, 12))),
//PTN.stripeRadial(TAU / int(random(6, 30))),
//PTN.wave(t / int(random(1, 3)), t / int(random(10, 20)), t / 5, t / 10),
PTN.checked(t / int(random(5, 20)), t / int(random(5, 20))),
//PTN.cross(t / int(random(10, 20)), t / int(random(20, 40))),
]
return random(ptArr);
}