function hobbsPerturb(
curve,
noiseSplit,
noiseAngle,
noiseAmplitude,
moveVertices = false
) {
let result = new Curve();
let n = curve.length;
let q = curve[curve.length - 1];
for (let i = 0; i < n; i++) {
let p = curve[i];
let q = curve[(i + n - 1) % n];
let e = p.sub(q);
let mid = q.add(e.scale(noiseSplit()));
let displaced = mid.add(
e
.rotate(-Math.PI / 2 + Math.PI * (noiseAngle() - 0.5))
.scale(noiseAmplitude())
);
result.push(q, displaced);
if (moveVertices) {
let r = curve[(i + n - 2) % n];
let qdisplaced = q
.add(p.sub(r))
.rotate(-Math.PI / 2 + Math.PI * (noiseAngle() - 0.5))
.scale(noiseAmplitude() / 2);
result.push(qdisplaced, displaced);
} else {
result.push(q, displaced);
}
}
return result;
}