xxxxxxxxxx
//Punts x e y
//Colors Rand - Palette
//Declaració de variables
//X e Y
let points_x = [];
let points_y = [];
let pos_neg;
//Colors
let palette = ['#D9ED92', '#B5E48C', '#99D98C', '#76C893', '#52B69A',
'#34A0A4', '#168AAD', '#1A759F', '#1E6091', '#184E77'];
//Num corbes
let num_curves;
let c;
//Funció Setup
function setup() {
//Creació de la finestra
createCanvas(windowWidth, windowHeight);
background(0);
colorMode(RGB);
//Inicialització
curves = 10*2;
//
pos_neg = -1;
c=0;
//Assignar tots els punts de les corbes
for (let c = 0; c < curves; c++){
//Treballar indidividualment cada corba bezier
for(let c2 = 0; c2< 4; c2++){
//x
if(c2 > 0){
//Assignar valors aleatoris compresos entre 50 i 200 + la posició anterior.
points_x[(c*4+c2)] = points_x[(c*4+c2)-1] + random(50,200);
}
else{
//El primer punt incial vull q es situi al punt 0
points_x[(c*4+c2)] = 0;
}
//y
//Cada cop la y agafa valors de diferent signe aleatoris entre 50 i 150
pos_neg = -pos_neg;
points_y[(c*4+c2)] = 50+random(50,150)*pos_neg;
}
}
//Desplaçem origen de coordenades al centre
translate(width/16, height/8);
for(let m = 0; m < width; m += width/4){
for(let n = 0; n < height; n += height/2){
push();
translate(m,n);
//Creació de les corbes Bezier
scale(1.2);
//Agafa un color aleatori assignat a l'array anteriorment
noFill();
let color_curves = random(palette);
//Les lineas Bezier que corresponguin a cada
stroke(color_curves);
//Bezier Curve 1
bezier(points_x[c], points_y[c], points_x[c+1], points_y[c+1], points_x[c+2], points_y[c+2], points_x[c+3], points_y[c+3]);
let interPt_curve1 = drawPointsEllipse(c);
c+=4;
//Bezier Curve 2
noFill();
stroke(color_curves);
bezier(points_x[c], points_y[c], points_x[c+1], points_y[c+1], points_x[c+2], points_y[c+2], points_x[c+3], points_y[c+3]);
let interPt_curve2 = drawPointsEllipse(c);
//Unir Punts
drawIntersectingLines(interPt_curve1,interPt_curve2);
c+=4;
pop();
}
}
}
function drawIntersectingLines(arr1, arr2){
//Faig un recorregut per les arrays que m'ha tornat la funció drawPointsEllipse per fer una línia d'interseció entre els punts
for(let i = 0; i < arr1.length; i+=2){
stroke(random(palette));
line(arr1[i], arr1[i+1], arr2[i], arr2[i+1]);
}
}
function drawPointsEllipse(c){
//Creació d'un contador i una array per retornar tots els punts
let counter = 0;
let interPt = [];
for (let i = 0; i < 1; i += 0.1) {
let interPtAx = points_x[c] + i * (points_x[c+1] - points_x[c]);
let interPtAy = points_y[c] + i * (points_y[c+1] - points_y[c]);
let interPtBx = points_x[c+1] + i * (points_x[c+2] - points_x[c+1]);
let interPtBy = points_y[c+1] + i * (points_y[c+2] - points_y[c+1]);
let interPtCx = points_x[c+2] + i * (points_x[c+3] - points_x[c+2]);
let interPtCy = points_y[c+2] + i * (points_y[c+3] - points_y[c+2]);
let interPtDx = interPtAx + i * (interPtBx - interPtAx);
let interPtDy = interPtAy + i * (interPtBy - interPtAy);
let interPtEx = interPtBx + i * (interPtCx - interPtBx);
let interPtEy = interPtBy + i * (interPtCy - interPtBy);
//Detecto els punts de la corba en x e y
interPt[counter] = interPtDx + i * (interPtEx - interPtDx);
interPt[counter+1] = interPtDy + i * (interPtEy - interPtDy);
//Colorejo les elipses de la corba
fill(random(palette));
stroke(random(palette));
ellipse(interPt[counter], interPt[counter+1], 5, 5);
counter+=2;
}
//retorno l'array
return interPt;
}