summaryrefslogtreecommitdiff
path: root/js/stochasticca.js
blob: 3e9ad22e7ef5759c6dddfcb6ec8bd37de2c052fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var params;

function mod(a, b)
{
    var c = a % b;
    while (a < 0)
    {
        c += b;
    }
    return c;
}

function sigmoid(z)
{
    return 1 / (1 + Math.exp(-z))
}

function drawCA()
{
    try
    {
        params = $.parseJSON("[" + $("#params").val() + "]");
        var width = parseInt($("#width").val());
        var time  = parseInt($("#time").val());
    }
    catch(e)
    {
        $("#error").text("Error - Invalid parameters: " + $("#params").val() + ".");
        return;
    }
    createCanvas(width, time).parent("#canvas");
    var C = Math.floor(params.length / 2);
    var values = [[]];
    for (var i = 0; i < width; i++)
    {
        values[0][i] = 1;
    }
    for (var t = 1; t < time; t++)
    {
        values.push([]);
        for (var i = 0; i < width; i++)
        {
            var total = 0;
            for (var c = -C; c <= C; c++)
            {
                total += params[c+C] * values[t-1][i+c];
            }
            values[t].push(Math.random() < sigmoid(total) ? 1 : 0)
        }
    }

    for (var t = 0; t < time; t++)
    {
        for (var i = 0; i < width; i++)
        {
            stroke(values[t][i] === 1 ? 0 : 255);
            point(i, t);
        }
    }
}

function setup()
{
}

$(function()
{
    $("#params").keydown(function (e)
    {
        if (e.which == 13)
        {
            drawCA();
        }
    });
    $("#display").click(function()
    {
        drawCA();
    });
});