Test bouncing balls

by BeNdErR

HTML

<button id="start">Start</button>
<button id="end">End</button>
<br />
<canvas id="canvas" width="600" height="600"></canvas>

JavaScript

(function () {

    function init() {
        var interval;
        var massMultiplier = 0.01;
        var canvas = document.getElementById("canvas");
        var canvasBackground = "#666699";
        var context = canvas.getContext("2d");

        var collisions = [];

        var circles = [{
            x: 400,
            y: 400,
            r: 50,
            color: "#00FFFF",
            vx: 1,
            vy: 2
        }, {
            x: 170,
            y: 80,
            r: 20,
            color: "#FF99FF",
            vx: 10,
            vy: -5
        },{
            x: 400,
            y: 75,
            r: 70,
            color: "#33CC33",
            vx: 2,
            vy: 2
        },{
            x: 75,
            y: 195,
            r: 55,
            color: "#33CC33",
            vx: -4,
            vy: -3
        },{
            x: 300,
            y: 350,
            r: 40,
            color: "#FF00FF",
            vx: 0,
            vy: -4
        }];

        var container = {
            x: 0,
            y: 0,
            width: canvas.width,
            height: canvas.height
        };


        function drawCanvas() {
            context.fillStyle = canvasBackground;
            context.fillRect(container.x, container.y, container.width, container.height);
        }

        function draw() {
            drawCanvas();

            //--- Check collisioni
            var circlesCopy = circles.slice();
            collisions = [];
            while (circlesCopy.length > 1) {
                var firstCircle = circlesCopy.shift();
                for (var x = 0; x < circlesCopy.length; x++) {
                    //--- Calcolo la distanza tra i due centri
                    var a = firstCircle.x - circlesCopy[x].x;
                    var b = firstCircle.y - circlesCopy[x].y;

                    var dist = Math.sqrt(a * a + b * b);
                    if (dist < (firstCircle.r + circlesCopy[x].r)) {

                        //--- Evidenzio...