Tunnel Effect

Port of Tunnel Effect example from PlotDevice.

Tunnel Effect

Source

#!/usr/bin/env dub
/+ dub.sdl:
dependency "chitra" path="../../../"
+/

import std.random;
import std.math;

import chitra;

void main()
{
    // Create a Square context with size as 1080
    auto ctx = new Chitra(1280, 960);

    with (ctx)
    {
        background("#eeeeee");
        auto startX = 100;
        auto startY = 100;
        //stroke(0.2);
        double c = uniform(0.0, 1.0);

        foreach(i; 0..300)
        {
            auto delta = (uniform(0.0, 1.0) - 0.5) * 0.1;
            auto x = width / 2 + sin(c + delta) * (i + uniform(-10, 10));
            auto y = height / 2 + cos(c + delta) * (i + uniform(-10, 10));
            auto s = uniform(0.0, c*2);

            fill(76, 51, uniform(0, 255), uniform(0.0, 1.0));

            auto primitive = choice([0, 1]);
            if (primitive == 0)
                oval(x, y, s, s);
            else
                rect(x - s / 2, y - s / 2, s, s);

            c += uniform(0.0, 1.0) * 0.25;
        }

        // Save as png image
        saveAs("static/images/tunnel-effect.png");
    }
}