ink drops

fun to reload

Log in to post a comment.

Canvas.setpenopacity(1)

const t = new Turtle()

for (let it = 0; it < 4; it ++ ) {
    let cx = [], cy = []
    const N = 40
    for (let i = 0; i < N; i++) {
        d = -1
        
        for (let j = 0; j < 100; j++) {
            nx = -100 + 180 * Math.random()
            ny = -100 + 180 * Math.random()
    
            mind = 10**6
            
            for (let k = 0; k < i; k++) {
                mind = Math.min(mind, (nx - cx[k])**2 + (ny - cy[k])**2)
            }
            
            if (mind > d) {
                cx[i] = nx
                cy[i] = ny
                d = mind
            }
        }
    }
    
    const phi = Math.PI / 4 * it
    
    for (let i = 0; i < N; i++) {
        let x = cx[i], y = cy[i]
        
        cx[i] = x * Math.cos(phi) - y * Math.sin(phi)
        cy[i] = x * Math.sin(phi) + y * Math.cos(phi)
    }
    
    t.left(45)
    
    function fr(x, y) {
        f = 0
    
        p = 0.5
    
        for (let i = 0; i < N; i++) {
            let dx = x - cx[i], dy = y - cy[i]
            
            f += 1.0 / (Math.sqrt(dx * dx + dy * dy) ** p)
        }
        
        f += 1.0 / ((x + 100) ** p)
        f += 1.0 / ((100 - x) ** p)
        f += 1.0 / ((y + 100) ** p)
        f += 1.0 / ((100 - y) ** p)
        
        return f
    }
    
    const s = 1
    
    for (let i = 0; i < 50000; i++) {
        let x = -100 + 200 * Math.random()
        let y = -100 + 200 * Math.random()
        
        f = fr(x, y)
        
        if (f > 5.1 - 0.0 * Math.random()) {
            t.jump(x, y)
            t.left(360 * Math.random())
            
            t.forward(s)
            t.back(2 * s)
            t.jump(x, y)
            t.left(90)
            t.forward(s)
            t.back(2 * s)
        }
    }
}