xxxxxxxxxx
72
var rings = 220
var outerRings = 5
var padding = 100
var divisions = 75
var noisiness = 22
function setup() {
createCanvas(windowWidth, windowHeight, SVG)
angleMode(DEGREES)
noLoop()
}
function draw() {
background('#FFFDF6')
noFill()
strokeWeight(0.5)
stroke(0, 60)
var radius = width/2 - padding
for (var ring = 0; ring < rings; ring++) {
var r = radius * (ring + 1) / rings
if (ring < rings - outerRings) {
r += map(noise(ring, r * 0.05), 0, 1, -5, 5)
} else {
r += map(noise(ring, r * 0.05), 0, 1, -0.5, 0.5)
}
for (var angle = 0; angle < 360; angle += 360/divisions) {
var x1 = width/2 + r * cos(angle)
var y1 = height/2 + r * sin(angle)
var n1 = map(noise(x1 * 0.015, y1 * 0.015, ring * 0.015), 0, 1, -noisiness, noisiness)
x1 += n1
y1 += n1
var endAngle = angle + 360/divisions
var x2 = width/2 + r * cos(endAngle)
var y2 = height/2 + r * sin(endAngle)
var n2 = map(noise(x2 * 0.015, y2 * 0.015, ring * 0.015), 0, 1, -noisiness, noisiness)
x2 += n2
y2 += n2
if (ring < rings - outerRings) {
strokeWeight(0.5)
drawSandLine(x1, y1, x2, y2, r * 0.2)
} else {
strokeWeight(0.75)
drawSandLine(x1, y1, x2, y2, r * 0.75)
}
if (noise(x1 * 0.1, y1 * 0.1) > 0.65) {
strokeWeight(0.25)
drawSandLine(width/2, height/2, x1, y1, r * 0.2)
}
}
}
save()
}
function drawSandLine(x1, y1, x2, y2, n = 100) {
for (let i = 0; i < n; i++) {
let t = random()
let x = lerp(x1, x2, t) + random(-0.5, 0.5)
let y = lerp(y1, y2, t) + random(-0.5, 0.5)
point(x, y)
}
}