You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

49 lines
1.6 KiB

function braid_get_rnd_params() {
return {
num_points: 10,
point_noise: 0.6,
num_connections: 8,
};
}
function braid(params) {
if(typeof params == 'undefined') {
var params = braid_get_rnd_params();
}
let points = [];
for(let i=0; i<params.num_points; i++) {
//const angle = i/params.num_points * 2 * Math.PI + Math.random() * params.point_noise;
const angle = i/params.num_points * 2 * Math.PI + Math.random() * params.point_noise;
const p1 = new Point(Math.sin(angle) + (Math.random() - 0.5) * params.point_noise, Math.cos(angle) + (Math.random() - 0.5) * params.point_noise);
const p2 = new Point(Math.sin(angle) + (Math.random() - 0.5) * params.point_noise, Math.cos(angle) + (Math.random() - 0.5) * params.point_noise);
points.push([p1, p2]);
}
var lines = [];
for(let i=0; i<params.num_points; i++) {
var l = new Path.Line(points[i][0], points[i][1]);
l.strokeColor = 'black';
l.strokeWidth = 5;
lines.push(l);
}
var connections = [];
for(let i=0; i<params.num_points; i++) {
var l1 = lines[i];
var l2 = lines[(i+1) % params.num_points];
for(let j=0; j<params.num_connections; j++) {
var o = j / (params.num_connections - 1);
var cl = new Path.Line(l1.getPointAt(o * l1.length), l2.getPointAt(o * l2.length));
cl.strokeColor = 'black';
connections.push(cl);
}
}
var grp = new paper.Group(lines);
grp.addChildren(connections);
return grp;
}